{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 328
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 7368,
     "status": "ok",
     "timestamp": 1591126407306,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "SFT2Q81Nhmk6",
    "outputId": "f2b0c0cf-c11a-4ac8-a260-ddf5ce846c06"
   },
   "outputs": [],
   "source": [
    "#!nvidia-smi\n",
    "#using a GeForce GTX1080 Ti for reproducibility for all timing experiments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 54
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1219,
     "status": "ok",
     "timestamp": 1591126414426,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "HkOPiDW8c_FB",
    "outputId": "73f44874-0161-473b-ff42-eabaf45bfc25"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pytorch version:  1.5.0\n",
      "cuda available:  True\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import time\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "from torch import nn, optim, autograd\n",
    "from torch.nn import functional as F\n",
    "from torch.distributions.multivariate_normal import MultivariateNormal\n",
    "import numpy as np\n",
    "from sklearn.utils import shuffle as skshuffle\n",
    "from math import *\n",
    "from backpack import backpack, extend\n",
    "from backpack.extensions import KFAC, DiagHessian\n",
    "from sklearn.metrics import roc_auc_score\n",
    "import scipy\n",
    "from tqdm import tqdm, trange\n",
    "import pytest\n",
    "import matplotlib.pyplot as plt\n",
    "from LB_utils import * \n",
    "\n",
    "print(\"pytorch version: \", torch.__version__)\n",
    "print(\"cuda available: \", torch.cuda.is_available())\n",
    "\n",
    "s = 126\n",
    "np.random.seed(s)\n",
    "torch.manual_seed(s)\n",
    "torch.cuda.manual_seed(s)\n",
    "torch.backends.cudnn.deterministic = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "k8E81UKkc_Fe"
   },
   "source": [
    "# Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "btXBVjRZc_Ff"
   },
   "outputs": [],
   "source": [
    "BATCH_SIZE_TRAIN_CIFAR10 = 128\n",
    "BATCH_SIZE_TEST_CIFAR10 = 128"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 131
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 4977,
     "status": "ok",
     "timestamp": 1591126421327,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "JJ82fe_uc_GQ",
    "outputId": "397d8f99-d5f9-4eb5-f519-3cfec49c7cfd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAABNCAYAAABdViSBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy8Z5RlZZm3f+149skVTuVc1aE656abDsQWyUgUA8IoiAGR0TGNacaACUUHUFAMBAlNjg3dQAOd6Jy7unKOJ+ez4/vhtDjrr76sede4/i5XXd9O3OF5nt8dnvveguM4TDPNNNNM88+F+P/3CUwzzTTTTPO/z7S4TzPNNNP8EzIt7tNMM800/4RMi/s000wzzT8h0+I+zTTTTPNPyLS4TzPNNNP8E/J3EXdBEN4vCMJJQRC6BUH4yt/jGNNMM8000/xthP/tOndBECSgE9gADAN7gGsdxzn+v3qgaaaZZppp/iZ/D899JdDtOE6v4zg68Chw6d/hONNMM8000/wN5L/Df9YBQ//t9TBw2v/tB4IgTLfJTjPNNNP8zwk7jlPx1z74e4i78Ffe+wvxFgThJuCmP72+4zc/4to1F/HEsy9w2WXnceMtt3H/z/8LwzC49iMfI5lKcby/lwPD4+CYSAjIgoBs2diOjW5Z5HUdy7IwdYN1SxexYcMZyJIMAoiCgCAJKIqGYRgAWLbNyy++SnziCJPDXXTtf5XDB4+SThboG4liOSaFgoiiCoS8Dm+UVXLpqvMIudzEzAlyUhY7LeAO+jm6Z5hlC5fw5uatbH3qZS6/+sPIegRVdnGiq5NLP3gdtuPgCvqxUmNUUcq+zkMk/T7eOXSA8b4xvG6JWXPncdbaJfgVDVn1YTs2bx44xvP3/oYnPvlpahZv4MXQGrCFP99qwQRbwhHACPez99CdVFdWM6u+np6BflraGjhw9CillX6snIxhGRR0hed/8jMuuvQS6oI+Xt7/DvGRCJZtsWBmG0ndIjw+QUHXScTjzKyrxe01eOKTN7Jryws8vn2AXN4kYgNeBbFZxO63OZiI80yHhWyfGngHLMtCkmQsy8I2RWwHrlwmMZHX2XkyTGXf6/zu2ddxezTWXnYjJSUq433HObhjG4GqRhr8S0hFJnBXVJGNJQlWKqiCiiSKGJqG26fhUhUuef9C5n9gFhOxKPlkARmB+soK9ESOqJBAL+iIigweNwuqQvR2jxIKliIrMq1tdaQSWfLxJIkxnavPWMmuVC/P3LefTZs2sXXLI+i5KZycgeZ2UzBNcrqFo+f4wA3fxDFNVCFDdUUjfp+L7qEJstkcs1rqEBxwkMjmC0iCwPzlK6la+Gk6v341Z9z5e05OqQiiiRZwk0lGUUSbteluxiSNixbX4l1az6ZnXuGa869lX9zkHE1lY8cxhFI/qwtZ/B741B8e5CefuYY6See6+zZj5nOAjYCELYCAxdrV63h7x1tcf90NZDMGzTPnkkzkyObS5HI5vC6JOc0hdN3GkUS++b3/4LVXNmMqGo7iwicbOIJKzhCxbJFyJU9FwKZl/hreOrwXEPD4vMiyDAjE42Fsw8Q0TCzdQg2WEk2VgiDwp3SwKAiYIkiWgCg5OI6DZcM1a5s5fuIk0XiUVcuXE0uG0VE4cvAANbVNfP/2b/CVL3yB3r5uPv2FH1P8O4nzz5jD+mXzGOrv5+ILL+LJN/Zy5z0PYRs58okRFi0po6CraJrC0pk11JYFePvIMHV1lVz3L5/hvA1X4zgOH7vzUso9XiyfC9WCvG2SjKVQXArloQAuVWVweJQHbnme7//bRVR53OR0m76BMKbiYtasZnLZFGUVLcQnevnX2x/l1i8/gu0YFPISk2P7yRcmaWpeRzZnIasqJRUhVi4s59rL1/K5e/ciOAp+zULDRs+bmKZFxigue8nR+eltZwEM/C0h/nuI+zDQ8N9e1wOj/98vOY5zH3AfFD338vJyBFHlmisvYmh8nNu+8CV2H+viQMch4kaatpZGjvf38vwrbyAJBQqJNOPRMG5HYDI2TsrQqc6miLrLiCdzAJjRURyxOIEsBHImaP5KZDOK44BtFxXoJ1//OJ29ETIZi7JSF4oogiwzu76FQEBhfCpC3rGoqq0hER2msqadOdWzGcr2IPt89E2Os3LpLLQMrFi8nK1PvYwiKzhZi9UXzuaVt19n8VwVrydASYmb2275FeetOJMrP7CavYM5ZtTVUhIMIkoOmiTy9pO/RFAkPC6BQaWNZXMX8zwwue6z1NfX09wbY8StIYjFrJrpaCh2moLkRrb/Z0HQzl17+OBN/4qUlPGntpFIJBiPpwkEytB1HbfmIgF867IFyIOjfO2OexjMCswphaExmWVLFmJXpEmmUgTW+Dn40gFExwZBQHRsTAFUTcHuP4nlqsZXopBy3AB0DmUxcjl2d56krrGKndveZvIXXyVUXUte0OjrPEGgbIrG9YuIT07h8XgJuVWuuOA0RLcHQRS4/Us/5/TLLkBxuQAoqCqqS+Pc2tkIepS182bS1ddFReUifGVeHjreQX9hgqmJDM0ttSguH90dfeSMLCUpL+MDUVbNK6W/e4BPX3kFz9y3HwA7Z+BkbBKJAi61hBJJQ1EtdCREwAJUMUv/+ABJrZxHn+mkvcXPtp48Z5y1Bs/UaziGi1QuCUAyOYXnsuX88eBn+M3LcQZHcuhhiyvfv5xrfnIX51/9UwYm0oRK3ORw8Pv8bN6zndYzzqIjLzJz1QI8GJi9/TiBSgB+8JvHefE/L2PnZ1fROKsNIViKFeknG1rOrGv//V0Xa+WaK9A8PnxBkVg0xfETB+jYto05rVUcG7AIeEtxnVKGnG3gdgRcloNjGBwfOE4uPElXbzedPb3EcnkAxgb6kCQJQVVQBAEJh8qaOhxFIafrFKwcqUgYQyoBbAQBBBwkWcaxbQwbLMMEHGRJKgrJ8ACFbIx7fvEGkktmzZnn8uZrmyipqMDtFtn84tOcGOjDcRxsweHnX7mCrq4ujnUc5qqLLkEWbVa2Bdj54q+YHB1mwweuJxJxKCkRkUSYSBo8v3UfuZzBkZPjPPzI1ZzSIyRVorzUS0I2SUbC6HmR6GSUUrmFYzsylM6fxFfpB8DK6kQlGdkCzeXG49FwcklEBzKjPVQGygDoPrmLBXMawByhrTzL2UtW8/r2NxDyaRavuoRXDg3Sc7IbgGW1PhBF8vkcpg6GoDClS1S5DMqT+yhUrXrPtf33EPc9wExBEFqAEeCDwIfe60eZ4UO8EO2goWops9rmM5Ec4tU336BvoJuWme0kJmIAqJIHw1GQyko5u30ug+EIreICTDuPHc+QVyQKlsjrj/0BWRSQJBFJktnXOY4jyiTiA1RUhFjYWoZgFz3fxro2hkfTaJkwdc1zqa1rYOjQNlrKFJbPKmF/j8W2zgT1LTU4EZnKUDWZbJI6tQ6RBvDU0FLvJxtJUF5eCoBlW6xcX8+v73iaqmCIyZhBaSzJ527+Ojd/8hMoJQYVjS6EwTRer0ahUEBRZA68+SKyqODXVLxuEUtx4/N6AJiUQlRWQ13EYbggIDomDjLYCUoG47RYb7K1fDUBW8dxFYi9fZDekTi7B2LYx/owS9yctrKdrF6gq3+ieJ6CyTN338nZN3+dp15/gbqGemYuWoum+QhVNXBoz5sA7H5uG6MpiUHdpF6VOJYUuGDdcvJ2loxjU1/fQjQ+CcDejU8Qi4b55s3zGBi2iMRF/JIfl5pg/oyV/OKHzxTH3Ibffe9LNDa4Wbd6Oedd9D06BuLUl3t587UdXH/jzfT09DG6e5D4+BiKJNLcPoMnHniWgYIHJ1jJpjdexRZlLrv+KgBkyUVzwcSVGwKtit6ITEPjWoIVlRQEh+9cdTab+/fzxBMbOWvuIs6eN5vJ5afRPzJFNhyj6pylbD65h0RZgf/YeP+78zOXz5HX0zguN6KZwh+sIh0fQZLBORVBpU0PrxzMIShDqEKcnq4pwqkCvT3HmFkj4Socx1brAPDaJrmew5Qtaubf6tOc6M5gZYZpP2cGYiHPtmgE0Vbwenwk81nqaxoZHx5CzGTIC+DkLHKShJXKUlVZNPIRHX7wxD5+9+WrmOo5TGP5bA4NDTOvoYWg3/+uuMtuHyiQz5rksjqFvMmyRSuoqirn+RceIOBuwMEE4Oe/+hWWnsdTVo0oKWSMAsmxYUzLxHGK3iSA2+0mk8mgCLBzx27S8TSFfIa5yxczY84c8pkc+ZyBHSxGc6LgIEkwMTGGu7ScdHSCQGkFAjKcivpGxwdIRtPkDJOAS+bZp56mvizEwLGDNGgaVeUVGLqNbR/DMOGdfQfBsFm5fAWJRJRCIceCBQvYtOkFdhwp+pdNNW5ytkxtyM+i1ipyeOk80YtlmThO8cCCIGKaJlEjjp4yUEwZry3w9MYBHHOEs5YupX/nBEuuKRohx7agYCLZIjVlMoW8QzgSR/W7cHt9CGrxf5fOcJFOdKOIHjK5POXl5dRUV9PS2sbAVJrh0RGa6poBSGXzCLaFIDhoQgG8XhZrYyz2TbCpswej7P+a6S6O83t+43+I4zimIAifBV4BJOC3juMce6/fLWpZT14O0TnQS//wXlRFZrhvmMGeIXLxFFrRMSOdSaMLBqc3l9NW5WJmSQnpeILxSAalSiKTztERL87iorBLiKJIWTDIZDRBXW2Im275PLs2P0syGgZgZGSECy+7hsr8JC/t2EXIIyFVeKktEZAlmcnIGDd+/PO8bUUpmVtKciiOqFrYVgErfJRgZRPZRBI9l0eSiwOuKApV1PLz27/Ao488zfC+Tu597Q1u/tSHmX9uEDNnkLfTmKaJKIhIokhi4Bj5bBhRkrBtg6lcgEBdLZpbAcAQHH75wNt89LIVvHNsDEEuRzEzuK00jpwmnK3BtqGlzsd43M+RhSuYiD/FrPY6OvsmcFeUMB6DaA5kiuepuVxkMymOv/QrNI+HQr7AySN7aZo9m4xRoLSqikg4zJaJAjIyAVGgzhvkeKyA4I9RVlWOmhSBPKUlXgCS3ffzH7f/EFFdzPjREW778llEwuMsW7SCfccPMqOpGNht/NaNkJ9A0Wvo7xljcirP8FA3J/QEX/7Bb9m/dw9nrl3EK53v0HMkSlVDDTlT5/iExZG3H2LthddgmCZ9HV28+eoWALLROBXjFm/F4/z7LZfglYOUh6poaG8lZwWwk33s2r2L01fNIzE2wVBNCDubpi5YSk4VmNVcy+ZwDy63zewlDWx/rhfHcdD1PLFUhgq/TcIJkZhK4tK8ZHIxhFMphgMRL5LfzcRohEDNPCoDDq1KGS1lBrrio1JbybERB7gDn9VB7MXPEVy5FqcJqjKDmF43gRUzSBy8E9kRMX0lRPUCuVyew4cPE3QJjPUew7IMVqxpoqNXpzHgI5JLvbuOjg/rHNm3g2w2T9pWGBibQO46SeC/rTU7nyac1inzeRBFEcPQqaus5NcPPIlsxsi6DRSlKA3JZJJkKkHtjDX4/G4qPG6Wrz2H5x68D0HPUDCK4l7I5pAkiSO79xEeHUWwLCxFpPvIURrq67BNBzuXpxAwiuKOg2QL6Jgkew4RG+ti3vqrEAtZdKUY2Y3t38HR/UdRPRpL153Dye1vsWVkAlsQ8WoSnrp6Oo4dxRIEvvPZD3BkcJAl85uoqqpCliVqa2rZsuUVaqrLGHi1E4CKkJcKv5feSJ6JTJbOk914XApnr1/Enu0byU4OkUmnqSzxEk0U8IoSrqTJzIWrEDmE6FI4cPQQ1Y0lBCiKkpW30cUC/WIteiRKU5mNYgv4LIWQGsAQisbf782yZH4FXeMhtm7aT962CPiDZE2B7sF+ZNwMD48BkMvr4AjMSz5BfSiEoJbi8wTIpA2mWq/GiuXfS1L/Lp47juO8BLz0P/nNy9sP4quuJZXKM9g7Qi6b4eSho8iyicct8aGPXMnXv/MDdNOgymWgWlkGBxLIAgQ1mTkVHgqORGj2DIbeOQFA73AUURSQJAmXqvHJz93KWeeso7GhhtrqWn7w9X8DYO3Z78dXEsTrqSXzzNNosxoIODJVlSEiukxNaYgZ8xbz0utPsefwbkTR5vyGWQiWRiEWJ6370IFEYQJbL05My3SoqWmm++ARQhX1VAQDXHrW2bTNr8JIQSqVxPJaaJoXy7RwuVwcPn4IzSVS6vVhYSO5vNTV1WJZRcsvKQoLZ5Tw2Mb7WL3ialTvGI88/BSRlMTCKz+Bp9qDr3+KpoJIWGviZ/1P8l23xJw3t1Ev2ZgRC8mRWOhkSV5xOd949lGwHFyyRF7y4lIzSKKC7ehMjI9h5NK43CoAgiOjiiK6Y+JtaECOH2bbrn5++LOL2b17G8lElkCwGGGsaXAQzSQPP3Y/3/jeFzB0GxDZdWAftmMwlRwG4PUde7n80nUMH3uHllntZMaOce7K+ew71MH99/wEtyRT5hLY/NLTfOHLXyRQHSARyWLn0xzM5lk0o5rcWWeyc+c+FqbmAFAYjGLUVPHbn/2Y+XOXsu2l31DXUEommiBjxGidt4QMkMtkGQqHyezKUhMoYyRyhAUz6wlVr0L2B8hlk0Rj2eK1CyBJErKskHEMKpFIG1m8wUqyheSptB+8dP+PGBqZJFRTz4rFy1kydxlb3nyZw7LM1NQkPUf30zpvMQBV6QE6+quYe+Vafnr3r7j9qvehj57glp9u4ba17TQyyUAazJE0TnsFddUVtKoqPaMTFCyHzQ/GkCoqWN5Qi1fW3l1HJ8emSKRn8NOnjjOUPUo4J/DVONiSiiMWjVDezKKIKoJtE49OUlke5OLLNuAJ1ZJMSrzw9P1MjfYDcMUFF7DrwH5cZSX4JZPmxlpcssi/fOYL7Nv6Cn439Bw5TiIW59C+A3g8LhavWEJDWwOSpLD5+ZdIRSPYNugFm/HuHgQBHNvBMg0M20RPJfBpFYzs3MTA+CTB+oUAvL3nIPlEFiGRYeiRxygLBnFrbsrraxnuOMzcWbM4+MLTnLF8Ho11HgylhXXr1qMqkIzF+eaP7+PiMxeR11V27Cum19IF0DQBr8eDKap86oZLiabSBCQBtZChrKoGd53ClgN7qIhLTOImrru4bemN/ND9CI6sIJt5rr72s4xPFR2KQIULQ/Yys7Wdzn39TJgWemqMZm+enJHCScqn7uVsHMegYzhHJlvgQEcP5607g09/6d9JOvWopXUUjOJaP9oxjNs0mFepc7x3iCVLykgl4vzxjV4GC0kyGfU9NfXvIu7/LwyMjrOmrpmdx/YRHhygsTaIg45t21RUBUmlEgA0VQY4b3EjjW3t9O7bTsDnw1dZz2SmQF9nN3v2naR/aBAAwyyGlqJko+smblWmtraeIwcPMH/RXFKZYm5+/+43ueiKj6OKIm0tzcTiEdpaagkbAY7s2U5pTQ2mlUXRPKyZvxwpq9GKiktUKVt3GnulQbInMzTVLMbUT+X7LZNVyxfz6qYn6Z2MUrr+anYcf4IFH65HUzyUusqRcLAdG8M02fr8RuoCCl63TO/wIDWhEJXV9Ug4CKdykKZt8dAfv0FrzXm0La2nd8sUgbM/RJWvHlGw6RJKscpM3MlyPnT4JRLttfyxbJhceQ4lU0tM9uOYNikjyK7JXgCqK8qg1MKmQFlDLflogtqmmRQsg8jUBOVVRZ/PpQh4HYuEobOv8xBVoXKWr1rC8KjOGWecz+TEGJVVNfCz1zmsC9x0+oW0ljXS3trEoZODOEJxE1swJNafv5S+rtfwz1xINj3JslUXYqNQ21CPKNqsbK8g7ZnN8b2v8+YbGd7//nO59ze/IpIY57wNl/Pb+x9E1QQ2PvAQc1pncu661Qi5ohA7ssjBvb1c8dFr+OBFG7jl5pvo3r0Db+0sZsxfRTqfIWEmycg1KBmb7f09zKmNYAoOk7FSfnTX3eRmVSLJErpunJqdAigOpX4NjyqRdbIMjUeYHBkjUKlgn/LMenu78XoDDHYdwUhHaZlRx7HD+6itriUeTSDZMDE0AsCG9c2suOpsgqUO3//s1Zj7XsLEyz3fvApx9DgFR8ckiKhbJBIJujtOcFZVOfNb2mldsIiTx48R9DWSzWbwasq760jFZmA8yr4ph5Tu4AgOcjaNLTrvbmLee+cPMO003mAFc+bMwefzs3zRXLa8vp2Vp69lxsyvEQp6uOR9S/nud76NR3ahHe2npX0eLS0zeOiJ5zEEkVBJFddefBa/vuvXWJbFC5tfB0NCkSXa21tpa6midfYMxoeHqayrxrIcIlPjCIKAYws4uoElC0yMdFNTXccMaT+T3YdRy5oBWDhvIa+98TayaKPKMvFsklTeoL2tkSs/8iEGwhGWXHwZn73xQxw7eIjuiV4qQ+UkcgZ9Pft54tV3uO0TV9I7mEcSJWxAEiUkSWBRfYiFS5aSydlceeXHqG9chOZyFTdmBej7w2+IdqYJeAVMx8LlkjEtC8eyWT+rjVCJwv6hYuSfyWXJZ1PYnjE8ZQlKS2YSG8qRD7kZdNcRn9xTXL+OTiScQXGVI2leVM1D9+G9XHv1h7j9t29QW+bCc8qZmstGFFVjZDTHQM4hHH6DtsZG3EIfs9ydFGSRZ99DU/9hxL3Ek+Ub//kNLNNBEuCDV38VzWUxs60Br6oiCsW84tu79tN9dA8nj+7njLXr8Pk0CukU0WiUZCaPKaqE9aL1cwQJRzhVVSJKPLvxMTacfw6rV59GvqCzeMlCBjdtJZtOMd6zje4xgb2dfdSVaagVtaw671za11yGQ5p3Nt9LLlvHoPcEp9evJmtVMixkGU/3E01FqaytRLfijDnF3J4N/OLuu5mYTJNJ5knFJrj8vNPx6m4KWR0LB5emokoKqVwSRbDQLQk9kaeioY1kLkdmZJIFbTKSWFy8qijR0HYNdt0MHvnlU1xemeLi3g72rv48ebcPj1MgKjk8kgjzH74IybEpLvHP5qnRAwzNK6Oh+wCFggtfIs887XoAArJARs/yLxe9j7sffgLFX0neskiMDiE6Bop0aorYEmvWLeCm73+J+HCGr37tW7z56jvs3rmPn97+GdySHz1TFMNJV46Lr12FYBZoLjuTruGfgyhT31TC3IU1lJQWDfWiBaexddsLfPuHX+XOH3+dsXQSTXeTt71MTD6Hx11Oc2sbs0uXcvjEQYyCF6+qsnhhM4mpHG/s3kxHfw/hqRGWzJsPgCC5KF8dQLFtXunq4BMTIwQaZ7Fjz0EsReXme7+G6XHIxgskUjlmvG8mouRDdats2dFJ+cxKAgGRgMuHy/5z4ZekSMQSaZIZh6wBliuIaWfISQaOVUxNuNwaQ4N9CIJM0ptk04vPEw/HWLN+A0NbN1NWU03/UDFqWVmSJnG0j91PbWLlhtMpbd+AcXQQq/s4qbFRdFVEDrjQDR3TVHC7Ncwly+kK67x+4CiuaIKy5hUskDow/lRJLDnUtAR4OeqwZnU9JyamiIxblNe1EOzrp6SsKBwLls7ltS1vkYgPIJgFCoU8tdWt6HoWy3Fx5prl+P3FCLS0bgbJyBjLFsxk1wtPcGLTYwjlIQRLYkqwuf6xOwD4xU/vI+QvJxyNYloOx090MzoaJpvWmdleg4CNYeYJBGpwHIe8qfPwkw8SqmkhN3qEPWoFfmeEhFNB+fyioX79rde56mNXU1FXy4uPv8RAby/nv+8cLvjARUiCRCqTp33+fKYmY4Rjk8Si4/T1dBAINaCFmhAVh/KKEF0j/Yinig9cXjcVdXUoAT8XXfUlXO4SBOEvC/yO7pxkNJmkwhMjqLl54dWX+cIXb+XXd/0Xn/nOFzn4uyepai7ed29FG6LpZe+eA0xFE6w/M4AnGGR4IIZh7Kdx7nrgJXIZN/lMmKlojMbWlfzwrvu55JrPMjKVpiIUYubMmQiSwPZNMDAVIW8ZrApWkpXTbA/rzGupoyuWoFRTyOiF99TUfxhxlxybs9cvoq+/D1WQ2LtzC+875wwURcEs5DFPeeGx8ARjnQPMn9nE5PgwvekcedNG13XyJjiKm4xR/K5umkiCCIKALdiEp8ZRVReGZeM4Nv/146/x3KatJCZHGe04QknAxyf+9RsIFAj5ofOdJ4gmBxnsniCesKlcfT0TAxqxZAy9WkD2KXikIKLgZcfOA1Q0+tGc4gLKFxwGRsKkdJOhqUle270LWbL55JwzUGUJwzZIRVKYdjVjoyOIWik5K0d1qIpsIcl4NEN1dZB4cpJQeTUAhmGQ8/txel6j8oIv8vTWjay79hZqogY9ulO0YQ40zpvHsSf3IUtumpa0kzx8kF0zzkLuHyUxphNJeHnqYB8AzbUhTl96Mc/t2MqKefPwUmDz8UNccuHF5FOjWJbNm0C1R+TTX74BOxmnvCLIz376LR59/GVefu45JM2DyzGQtGJaRpIkJFln0dzVdHTvZ837Tqe60sTjM5EkiVSqmC9sa6tjVsMn2PLmVna/c5CLz1/L5Ogh+oeSFCwHhS4mhztYctNaTj9tNUeOHaW37wRbtr+GJEk4ls3EWD/11SHyp8pbzWwezavhq2kmn4szls+y7fhhQuVuPv/SHRRcDqIsUTacYdayNiYzKnKZRTKbxDAkQrU+VEMgm8siKq4/T9CChSjLuLwBEuNjJKIjhEqCuCQPtgjYMDowQEvrLIYGBhgd7CcyMUptUzNbt7xAd8cJPnD5Fezcvg2A9ecFMHLjlIZq8C88n3TSxD2/gZOvPUMoKNGkponFUgy1SCQzNiVlIfyRPGEjwub9XZTLNuWRME0fvRr7lHG55obljI0Ns2hhK8ePHyfgSJSUK7jnzkXYcYDapuKeyM2f+Dgfv+6jlPh9PPn0Mzz8yOM42AiiiCqYbN22nZqaegDCoyPIooM3GCRu2SxeuARbN9A0jWwuR1csCeQwzQKKEkCRJAzLwbIsUpkUnT1jZPIW5aEsk+MRZpzejGVZ+DURNRdhuDOMqop4idHYNpdkLkdNTVVxbs6cw6w5K0jGoyxYuZprPvpheo8cwu0pJzIxxOwZM/DIeeLxGOXlleSyuykYOraZpKyqDRyB3oEh7rj3wXc3Sw1b5pL3X8KZGz7BX9F0ADoH+6nxuhiOO+R0HV0vsHPnTipqqjj/wvU4tsNQdZ54qiiwU5kMrQmvtzYAACAASURBVF6VOr9FjcvNQEc/Wd1m5VlriUSitATiAOzqriCZKkG3x+nqPUE4GiWThZpQMxXeUkS3hiwX5/HgSBRNEjkh6Ow82EldcwW9U2EEy2I4nCWe199TU/9hxL19xgza2wXOOn0Zhl7A7dZQATObxTRNTKso2EY+ByiMRTJgGdiWjYVc9AYMAweDwqkdfMdyMDCRRRFHEBBNi0KhQDabQyxEkU+VD7hCzUSyFsnRERyeJjwaw7IMpmJZPO5yULxk7DiSV6cpMRPJlojm07jyIlqdQEAzqa2sQ8QEd7E8ShRFxqJJhqNxdEPg3s/fyh0P3U9iKo/b5cYWFLCKaZk58+YhL16EY9qMTU2S7e+jfWErs5cuwS6Ac+o8BaBxxQZE80IE24IVZ3DXz77D3Gt/hCgUP1dtGB+f4teyi7rKSsolgbStE/z9H3hUl3ki70O2kjQd6AAg6PfTNdjPpWtOZ8vutzB1lcYKP22zWnhnSyfldUXD4hJlcvk8guSgyQVU0eHDV57NR6/awOT4EKKZxdZPba7pJhoqiaF+RCnP4rZKxnNjJNMmiiyQThevZ8WqVbx/2Qx+89DzeCtnMGvJ+3jrwbc4dGKY1jo/k1kRM5zlzh/+nKlMhG9865uEw1P8/vEHyGazIAg0NdQg2DKZTNFguBURJ5NDzcRZ1DCL37+2keOd/WitlSiiDwcZ2zTY3z9CcCpKeXMddQ1BShQ3mfI8FYKKDnhUBcG0352fwbp6ZpTNZee2t6irrUVzJ/CoHrLJCKJdjNR+9KMfFZ0R2yKfz6HrFqZtU1ZaiuM4GIbFf37nO3z+s7fgWF5EWWbBLT8gJyh0vfojHu5P8ePPfJHhZz7Fx85tJvVyguqFiyk1DXJltXT392CGw1SJeeaqAWJNpYxbBsFAsYdlXvvpzGu3MWydResaWGTZ2DYcE2Uu/+QNzG6axa/veR7DMLAdh3Q6zRnr1rLqtKW4NBeWIXLvffey+8BBxseLEUZNUy2GrvPGCy/jwU3H4WMgG2iKBqaB1+MlmwRRlMlmMzQ3NtDVPwyOjV7QMfUCiiIRCgXoOtlNPl8cJ92QuPAjt6A4IrZtY9s5BEFBlYprFKC+shwNC10USCUT+Fwu9u3ZzdKVqxgc7EEU+1Bkgaq6CiJTo/gUHc2lER0fZzA6wdoVy7jshq9jCw5/KsG5767HqKtrptg3+Zfq7uBwbKCT0WiWEkEg6HWhCwL79h5CK5f54JUXki/ksUwfbWoNALKUIxGPERAUyuvKOdETZWB0iIMvRsi43bSVFA3l6EQGUWnEtlw0tNnkXCGMsnrqvQH6+9JoOYeeoX4AFrY3YeUdfF43TW2VOLKbtwYGiaQyVIdCpEYn3lNT/2HEXRQEbAQ8Lg+2qiLLEpIo4kgSgiBgnvLMzl+/BhwdWRQQKOYRbSQcHBzbAUHAsh22vfgsum2fer6CXRxGQSQWS6CQp0I1ME4ZgUXLT2f/1qdZNLuFof4RvC6V4ckkNQ21DA9P4Sn1URJUmOzNIJXmEW0fpByEUpV9HV0EAhrlVdUwqtE1Wsz3O7ZFJJVieGKcWCzOvr37uGzlOpbOPYtXujdD2qS7U8fXahavURSxbIvKUAXVFZXouo5VsLFtG1EopmViw1MImFiig42IaIu0zPwA0W1boaUdAQFiUdweL7NWbOBkRyfhrhOsSgq4CzamaOMK+rBdHiKTxdJSyzDxaTabt21H9ZcSCHhxXBoBTylCIUf21L6EKAroRh4VEVGUQTQZHo/gd3twaW6cgoXgKobyAXcltiCQlAQC7mqyto2XCizbRhQlJKk4lq8/9QR16gWctX45mWyeB3/7OzL9E4ylCoiJEqpcBSxcqKpEajzLee/fQFowkU2QVAlBgFg+g18ro6q8nFNDTXRPilgwzWh1FyYgmSJOT4bmhXNRtABGNsKF1y9F1hUs0UJEIZ/OUxN0oTgqWdlARUA4VTFi2zalJXXEoqO0zWrneNdJAj4PVgFswQOOhW3bfOlLX3rXczcMHZdLpbapmWBpybue++OPPQqAUdqIEenEG0sglc2i7ZLr+MO9n+SL+x7CH2imSRrgunkq2tIbKEWkYOr84tnnKFhZBEtkuxDDdcLm/Ks/imkVxyiZDNPdd4hCPouiKOQtAwUF0aVgOyKNFbUA70bBNgKiKKIqGvlsAdt2uO66j9DW3s7Y2DgbNz6Cy+vDE5CoUBTkGQ62UMxbi6JIMpFCFEWmxkeorKykbUYDggND4+M4toQo2mgKVJQEcXSLJUvm42hubMfBtiw0l4QjiDimg+i4UQQJx7YwThnVdDrOq69uwuvSmBob5vB+mWuu+wRDHcfxhipJxyYpqW0inU4jIuFzB0klxkhlFExT5ooLVvHBS8/ic1/7IX960kplRRWO45xqevrLnhDHcThzyUrC+RTnLVvI2RvO5uGnnmFsNEagPEBaSLKj40WWzW5g4cor+fqXHqWpZR2KL4QwfpTs5CBeP5y9ponSusXUNVRAvtjb0N4aImqW4CnRsDSF+jkrGY2OMxnXqWxpQSwPUioVDc5UKg2Ci4H+AdKOTakqUrAc3AE/I6OjiJr0npr6v/7gsP8XBEFw3unow+dWccsKqiQhoYBokA6fxPTNJptOsmxuC/OWLUUWJdxuF/GRCVxeCUSFZDqH4w/ikTOoBQ8HD+/nsT8+Co6NkckgagoezYsqSdiiiCqLCI7Ahksu5tM3fZprzv8gm97ZzlsnjhEqC7KyfQYHDh3hyT/+EYc8vkAlkakh8vk8slzsthRFEcdxEEURy7GQRQnLlPAHtL92je9uaP33HN/YWJjkyCS17a2nwkQBVZXRdRMEeGf7brSSEKcvb6ehqR6f30XasEjHYoiyeGqRpSnVVPKGjuVy8fmL1pMINNM7GiacHKKuVuO2pgU8fnCIbk4QTmeQkdnxag/7nrsfQRIRAMsyi92DOCiKB90yECyTFZd8gm/dcwDbsvH7XNh6MRefyhskUyayDLKiUsjnueMrq/jSN76DT3Mzf14bG87ZwBtHOjmSVOjftZHmJZdjKDLfvmA+l545l0Uzgsys1+gYTLCgoYwd/Sayr5Lte3tYOLOFnpFhEj4dx3FQFBW324UgCbhcfkRNQnWreCQf8Vicl+59mompCNve2c+uI8f50Vc+9zfn3E/u+AF2QUdRNRTAtDXKK3xkMyaWnkAQBRxR4jO3/isT4Qwel4CmKYhi0dP8Uw7Xtm3yOZtIJk/PyW2MdHWy5PQ1DAwO4fN4GR0axMFizZnn8vabb7BwwVIWLVzOZz54ETd/+lP4ZYX/evhB0rExhgdGaJ/dxms795BOGUyGc9x9149wkLAKGTRfKZKtYyBi2QY+0cQWXRQKBT58022EyoN4PR4WzplFMpHA63Vzxce+iNvrRVU1RFni8gvW8YxYhzsQwFNVTv/YGFY2QY03xIz5c+nasQOtoopkeJJL7DGu/9z1TE5MUdtSzfH9vSxbPhtZUNH1HIFSDc3n4Vuf+yFvvf0Cn/nUzZx2xiocAxw9heYLYhsWu3ft4Wvfv50n7v8VrVclkRwZRwIjY0I2iOpVcbklIpEoHp+MXbC4/abd9PR0kc/l+OG3v8Afn3yLBy532Dss8stDMgtmVnD3XV/nsR/cx51nbUEQRTyyiiqCIspItoMjgOkUuxByAsRv+RuCKAgsafVzoCdDsR1N4sLr1mMZDpLjkHcsSt0l9Bw5SXVdLdGpMCWShrvcwzPPvs3OfQfpPHYIn8+Poqr0DE/w4D3f45Zbv4Ml6rx94Ch/+MUdPPHQt5l69VVkJ8el332UjV++mvlLF1FeUs7vN+/j1T0neN+KOfxk41v8oroaURFQTMhrGrUtsyk571w8pQFcgQaszsOc9s0vA+xzHGf5X7usfxjP3bIsTNNEtx0kVWFy5zMM/eRTKD6N1t+dQHJObSAIDt6ADpabOctOo7u7n3w2imkUiPSdxOv1gB0BYHCgk92HtzIWjaKIEi4PyJKM4vJw2blX0BBqBeCXv7mHe373S1RJJhgIsSeV5nk9jW392fClk5NYp3KbpmkiIGFZNqoq8cu7f8H+HW+Qjk9w2vqLiqd5avFLokJ1ucZEJIdlGxQ9CAEEG8eBB17+JdVTZXQ/dg+Tf3iBn/a8w+dv/TY//vGdHNz8LAe7hpk4dhiA764t5enePDuGYqdyzjrpZAGrYJKX3TS0lhCdSLO1z4/DFNXlfgL2TBa6Ity9Z5gJPcS8eReyvqWU7a9uAnqIpMZ4/P5fkXHPpTR1kFlzZ7PqvI+QTU0giCKZTPFe5gsqJV4QHPD4XcRSFiNT4/iD1TiKBZaNohYjjNs+92kU0aF3eBjLslgzr43dG58jM3CIlGqzY9fzAEyOTDAWqiKmNVLRUMOQ5qFhvkSJIOIqmcXI2ARBOYK7PoRLczE4MEYulUUUBVJyAa9HxZUVSStZZLVoUH/zu/s5dvg4fUeOctqTG9mwYTZGPkY+lUJSy0nGUkiCTNvilciaC01RyGUyeAN+8tEC7lIvGT0CqoZjFMdfdbkQRRNBEBAE4VR7/Z8RRQGXS6Pz5El8GExNTRHw+Rjo7aZvaJil8xfTefwIgUAZnceLZbp9I0M8+swzFOQIJ/tH8HlN3BUqx4YGGYraSJKJS/tLJ+H/hihJ+Lx+tGA9i1ZfSFl5iJ3bN6EbOc7ecAUlJcXoxnZsbMumpKSEReU+9nb0kHYs4v0j2KpEtJAtNuYAe3d3MHfuLCrwcs6qpWQo4GQNSkISMgVKAsV9lptu+jiRySw+TxAjk+Stt0+QzhdQZBmf38/s+jZGhkdozsuIjptsWqauVkMXbXQzS66QISD4yEdyyK5TzzN0FFTJoLquAgsDl18kaxqsP30VF116EU+8NcIrRwfgrP/RbfoLBAd8fh9LZ7vZf3KCpbNDGGkdQQUMF3rHMMOFXhoqavBoXubOrKan9xiTkWKE0XFkN7ZuEM+n0Y0CyalJPnrdDYwMn8ClaTQFi/twGh4O6CWcXV+NkZwkI8gc7hihRB3g0qWtVJX5WdVcwU82vkXtrZ9n8Uc+gpXI4Q8p7Pn32yn0DtC39x1ePHmSS73vPTf+YcQ9n8sgmyqyJJF1RCoUi9oLLiOWziDYFt0HinWqIwMDDOkGLbNnkYwNofQeZ6EiUWnDQ4aDrReKaQNA9iqMJiOs0LzUePy8oY1jFfLknCwPPH8vF6++BgC/x89/3PhldI+Hk+PjjOczLGgO8cAfHmBiZATb0RElreh5n2qr/+Vdt5OYHKagG7zx+tv4vDJXXvdJbvj45/nqt793Kp0nYGNRWqoRSWSxjeJ7glDsahREAas7x8S8dryxcaK3/gs/+/6DNNXO4p3NWxjvHMfoHibY2gTAjS90ockKumnQWF/L1NRkUeRVyBfSDPSlEWwXHzl3H/tGziT6zn7SnllUjL3G8pl1zCwLsjcW4tfP1jCn/XzgLeKZSYIei/qyOGJZCVF9gkfu+iIFOciVH76JkfFiyaTHpWM4AqojY2aTaEIeNdFDSVUZiubHdgxss7gou7s7yGSyFNIp8rFJZrfPZPdjd9DSVE1h9Bjp4WLedcOcEJ7Fp2Egcf+v7uW6G24gmUiydO0KHn3+aabCKdySQ+mMVnTToKy8FEVysCyHqfEJMB1EScTnizNZKHYGD+3cTjacpE3y0i2LTJ2MorlUVKcEQYI6dwhFVZB1A8Mu4ApKSJoLQXaon7WQ/XtP4im1EfMF3KceaZDPZfCV+oFimkyS/uwBiqKAKYGMSVNTE9s3v8BgNEVNdS22UUA2HeKxGMnRJJXVDUxNFbt4P3DhOpauOA9N83JyaQdOIU50ohdN0Wgt38/xE1EO9o2iyAqIEkhuBNtAcysIhoXb7eOhJ19ibHiIW2+8AYDZc5YQnhogERum72iShBMjKVdRyOd4+Pc/5+ZbvwWA6YAlgmkZCDmdpJ4lnM2wdaWPxmgFwbIKWg6OwcQks5taGe0fpq5Coaa+jBpfJR5NwLQgm8sSUIrink4ZtDZWokoCJzq60fMWyVSeuS0hIpk0o+MnyJkOIamRaHgUjyPglgPIPp2Q5CIv+BA8xWe4uL3FeeQ4BRzylJSUIMkCtTfu4Jb6IAeOjTE2OUg4aiKu+hABVUUSJRRBRBJAplgCKggCkuAgICID8b+iOzOaKjlr9QJefWMvAbeEJAgYBQMlUqB2cRvRE0NoFUHEgootu+ntG2TlupUsW3QFP/7dg0AxenMcA9uxsGyJTZvf4uPXfxSXu0CmkKIQjgKQzCTZtmsvc89fyIt3fY8+p5rcsT5WzvQTTYeprwoQTRfLK1/tG6D34YdZvXI1Us7CMAtEuk7yuNeFePppjJ7sek9N/YcRdyufJmMrIKnIBlx9479DIU1zeYDvbtjD4GBP8Xu2g41A55EjqKUhJNNiqsTPQcvg/ZkCj0cMQjXFTc1XDjxL7fwSUmETT8AkVBWCSAltmos9R6Z48c1i5cJvr/kcfX0j6F4XkmDS2lDL8pWrWLh0Nff/1928vvV5/u0rxYVh6Tq//uV/smfHXkzTIpVKsX79Or77kx//H/beO8quum77/ux2eplzpvc+SWYmk0kPIYEEUuhVaaKIDQsWREVUVG4pUkQFRBEUsIChg4QQQkggCellkkz69F7OnN722eX9Y4/c9/0+7/P458uz1v37Z9aatdde55z9+137W67r+nKmdxLDnO5imyZgYgoyGdWgpryY8WiMX9z1bZpnNfOd797N4RM9jI7107P7fpq9Pt712bmw9VJe2rKBGWfNRZ5VxfbDQ7z+ve/zo5/8nPLiIFoqg132MjE+icvlQXKZJJJp4okkmi7QWO/iz++0IImTNNXPIrhtA6+Ol3NJ3mJ6+z5kUBdpIEa1rRmAaDhEQXkthcFCCkrmIjFKpLqYjiPDvPnyHxCb8gC47OwCZFnkgYeexDBztLZU43UnGT28gZu/+GXUrMl0oMtFK85HRedLX7iZKy5dQyZr0r5wBamsQDgncu3ldRw4cBKxsIZULIvnzBG+c82F/GPbduyGxMuvrEcXDLKpLFfOr2VMkbArMlkNsoMDKC4bBTIE/A66Tw0zZ2EpQsIqdZXWBMkJGr2EQLVxJpRi8SwnJweSSJJEc5GEHRFV0DCBbDKNoWgUSD6e3/hPyp0uXAE78cgErtLqj/fnsUP7rPKT22lR1qbViVpOAyQQBAryizl1qo8LW5dQX1fLay/8hcHBAU50HGDOssWcOHwIt8PqS7y+ZR+9gx14Kq9i+5FBKottDHaP8oNrS2m55pv8+N7/QMgZ+DwuFNlOMhPCJjtJplUKA0FefusdxhMip3qHEKYzifbZDXywbYRvXHE+fUd3ctbCVWQEmb9sOUh3Ko6mWb2OLAaKYJLVVCYTEXKCZTbg8LkYy8+xtNNgbMrK2HLZKPNnN9HUXogg6NhNjSKpCo9UQig0SlS0rhNQmDe/FTWTZXQsjIZJY1Ux11x7GeFYhlee/zMuGXI5E7tcgOw3GeiNUttQTjIc4ciOHuYsq0RUdZJZayMNdbzH1MQIl179dWYv+Qw2r5uBQYGcEMDtcbGoxWT/mWPYBAlFkJAwEBAQJQNMCfHIS0TeeoDCT91HqnH1/4I5561exTVr2uk6sI/m0iBTyThelx2XItJUUkzXni58LoH5y89j39aNRIC1bTWEQsPkl5XhmmZTZbrfYdeBExTUnE2e32DJ7EL6jr0PGmCXKK1rBGAqMU5xgZdIKElJbQmjx7s5p0pmcHAAT8CDbIdo1uqfzH/tJUxD4NisRo6GE4hTEVI28C1cRFFBAXuP/vvxGJ+YMXvpWAJ9dIRf/uDr/OR73+bOqxYREiQOTiQZefvvhEZOAqCm0tQ11vHdHFw9EcfucyJJJudkcnQ6nRRXFdHinva7CDqRFRvCrCKkpkYubfgUueFStvYZyDY7mZTV6Hj22EE8FSUIzjxSE0l2vbON93cfZP3Gd5Ek8OcF6OzsBET++Nh9hMZjDPSP0tRUz9zFZ1NU7ODDrZuorq7+uK5eWpzPJRetYuG82Tz4q0fJGRp/+d1/MK9tNtGpMPV15ZiCxqlDh0iPniQw5yLUFzfw5+fv49EVjVw8leBTAyO84k3xyG/vB6CmrgZFgBXLlyO77VRUurB53Oi5HB6vC7fPw0RMQBREzi3q4Quz3uOmq93Mn5HmzX0fELVXk44KFDnz2TXNt05mEjz61k76xjuJxE/iC9hRXCY2UcWl2Bg5YTWIe8YEekYSTEZDRFIJdu7vpuPoICPhCL9/6gm6hnqYTCcAqK0uxW13IggCbx45zhOvvcaJKZGtHcMMxtx886s/AiAh15CZHKW04wgjsTg1lQFUQUfNJnHYFcvfxIjTsXEvB97Zy9D+faixLMmJMGZWY2xohPIKBwkzSNdJS7Y9NZHA5fFSEQxit9vQDZ339vQwForTNzJBX+8Uk1MpTvcO0Dcyyqn+QY7s2MfTL/4TZWwAwWEnI4DiyEOWrCDhJ9+7HUXLoIggxROcPNiBqufQTRBEBdE0eemxBygrrcXpdLLq/AspKKjgnPMvIBgo5qprbsRI6BbbaLrfssCIsHdniK6JSaoqCxFFgzWrruCjowdICTpdYwkkrxtBMElnEng9ATweN/0jfeSqmjk+YaA48jBMFafTAhlDU7li9Wo8ksHFay9A0zJUVVVw8bx6/D4/2UwSgJigk5UFJqNxXvaG2dqk8F6VwsToGDabg75Tp4ma1hmqKikgFzbQR11U6a34Ek3EB0UySRW3P0DfMSsTSSYzSIpOTte57ac/J6vlUBweaqqKOd7dT13dPM5ZczVF5QoFFU4cskRpZYCh8W46P0rgMkO4C/3YvTKSxzpDL763n1nnfRpJFqmr9uNCpaHEZGGDnTlVCo89cSfdb/wJmyBYwC4IiKL1+wqiTlu8gwsvvoJcfgWyoP83vJEEiTu/ewtGKoIR7WPR7BKcCjjtCk4FNJvCogXzCJSUYrfLnH/ldRT7BfKLKwkW11LU2ExFwCpD7tyxgwZlkvp8HVnyMzwyzqmuAUrzcoipDP1HPwJA8em4XQqSniMWDuFWE0SjcdauPR9NN0lHI2jTpWBNkMkpEvGu08hTIXRR4EB9DadPnOCNN97ArKz4t5j6iYncn3jsAYIBH76CQqqCpXzQfwQ0AyQT29Qp0t7lH187MjDIxZKXHic8mrOTjUV5UVYYUAQSk1OEpoWFZ+UtZniwn8VVbUimiZgwKDp7NsbAK8S6ITgzDu9BTIjz+OZ3CBsm/mA5rsom9nSOIwsCrsLZnLu6iJAeAAzOPu8C7vnFD7n4kgsYCw+S71G49JrV7Hr3KMkFSTweDwCP3P9jautq+ewXbuHOH/2Mmz97E43N89iwYSOnT53k9fVbEYE9vWGymQR5Xb0UFeYzGo1TlZ+PGupGOXgGQfZx5pgFsIaoU1VSxDsf7eSHF59DniAQqJ7LVx5+EFkxyGo6OSOLKUioBBmdnODBd6Y41JXlp9/+HB8dOcXgeJxab93H0V42q9NU7qRnQqRtThWqbmek7yjz5pbR0dGLMzR9najy9G/uRRdMUgkVu9OJ7MgjkYwwMdxJ+1nLGZq0Et+rP30daiZK+/z5aHnVPPj+ENjzSReU0jU0xE/ut7Kgwo8+wC6lSNsUVE8R14+fYDwSZt/C2cRlk72HMownsyxoqyYai+Dze1GzIoKgEZqMUVxkw+txkXbJtJ41l9PbjyOKOjabSFcyQ2hyEsMwyOVUS9+Qy3Eil6Fkrpd8jw/Z5UVQVbYdGCIcjtM0ezZKUS0nd/+NsuJaYklLTBOPxxkYGaesopgMOofe2Uo0nqZt4VLSqsqff/dHnLJONptBFjXKSsrZeupdWptbeeiBX3LbXfcQikcxQxOoWatOK5dUcWMdNC8oIqG7EXQfopFgMl1Cz5FdVJSXM76/AwCHw4ZpgmBAXqCWu1+OUZRXxImDO6gtLyMSsURhhgGpdAZfoISDZyYIBIIMTsSRRImsqvLqi5YRWljQkDWV9wKTZESV5LBGoCBIe9tcCkvy6XWeolizQKaxxc/mt07iO+3GiMvY7XbGJsYJRgPEopP0DFijGxwuG4mkSX6pA003kBCpam6gp7efNZd+jm3r/8aKy75AJrsLwRCQZRWn4uL0lhD1dWFSmkTH0dN4bT6UfAuIb77xBlKhSSRvKbIgothEQrEMtz3wGJ1HPoSBfq699VY2ywAmgmBON7pFWt++lT7BTSYcIfzmtQR+euC/A44IL7z2HqU+gWDLUvJdDvSPjjMVSaEHJBSbDZvNRkFB4XSmpvL123/A+Ngoh3duJzU5RmVNHXCYxhmF9B8YwXC9R7U7w7zGLMgOcrYwJ6KlqP/S3ZhZGhuLKXf5qS32MZXMcfLIKSYjIYoCAUYmRikNWOVFBRNV1PGV1SAmM6ipFEl/kNVzFzC3fS6bX33132LqJwbcm5wqrVP7WD6rlKQRQqnNsGuHwISqc897/RRVW+6ETqeT6kSaoORjgeQi5vXwk7XLuHfjdv6s5bDb7OiSDlloW7iCuYth81vryaSmmDevndbwBJN+kxneAsYyAEdwur1442EMLUzo5BiJvlOoDi+V5cXMWNDGsvkXsOewZTxUWlLJ5eetYP+BoyheN4NDYaprrmR79gM8DhFpmjv7xtvvoacifPOrt7Bzzx7WXng2U+Ewfm8+f/jrW2Ba7HWbTWFxewsl3ggrVixgQSLJnr8/zXemDKZU2LbuQfq+Z6kAFUHCke/BnctSueQaeodO4XTaKK8oZiqaRIslLMGWofFhT5iJRC0l+VOsKZZ5ecMOTgxEWHPOYlyywSUXLubVF6B74CCOShM1G8eVN5Oh8SHcPh/7DoxRUFhIxjSBCMl0ioL62STGBqmuzsPucBILDdIwu53O0w7cPieefMuq4Ml175KRD9Pq9AAAIABJREFU3OTtncQVKCN+5H2UYDmpkaN89aYLCOZbwJEozKfDDHLO+CBoJl84dIq/33ELYlzl5MGDzLz0EhraZvC7F/6CbFMYGYxSXJZPIOiltLSQaCTJZERlpOs4hQ2W22I8HsGUFOqKPUyE0ohilqnJKHa3A03VcDslJLeb5pn1iIKAmdPxONfy5utvcGZogNC7T+N2B0DIohjW8YhMjjHa14maSTA0PsWp0VE+fOQRbvriGK++/CbnnLOYLR+epvz9V/FLJq88eT8Ov4t/vP06aibDqZPHOXGsk6KSMlLT2U3n5Bgj0QhTPcMsvexC/DMWUlgYZCLfR6jnBF+/fDlfPHIQAF03EASDcHSKwkKZ8BMP0zW2B7vN5Atf/wq6bkUzgYCPuX6NvlCMWfOX8K37Hueh224kEOunvqGRRNzKVKOSwb5AjsryUiZ7RskqaQRbhqP7d+ArdlFX5GXVgnnw7joyAykuO38W3cOTvLNjL3Nra9jb2UcoGaG2soKzljbAK5ZR3sKVawlNjdE7Nk4qp/GT229n+/YtLGmv4dnHTvOtmUVsOKGRShpoiooQz1KzOkjvyUI8ZSlq8qsRjASaaDULb7riIgzD4Os/vJN1PW30nXgKORwh35nitpuvY86887nyvHOZ+cf7EbD6WDoGruQQR08foL5tEWkiJD/9i/+lRmEaBif2f0hw4Uw6d2/D7vLQUBLg8GCKhpIAXUP97NzTQfmsKsSdMu2tTaRTXXy0dwcfHj1M4UQ/4WGrPl6SSPDn0zkKJtL4amZTEOtGEzSq26rQZINgcTmwnQVVS/FEjxC056OFTlBSZGOLqtEzOsUF8+czHg5TU2zpSt4KFNJlaIR7hrlJMym16cya1cau3TuYnJjESMT5d+sTA+5up5+tHSrBMomBiUke+GiSCyuqOJhMMmqYxEITAJjodLntPJEXxO9wcZvs5u4PD7Pea0OMWlad/0p9wxPjiKLImosuZrC7g/CZ02ScDuQCH0WKnTnBctYBn//C9Tz+2DPYpiQcTgGDJI/cfz+bt+3gw492sWLlQg53HAGgoKQCVbBx8y3f4Ez3SSamo8NlKz/DcH8XZdWWDD4WSWDoBt/90S8xTJPrrrqaG7/8LX50+7cxpnnGgiCw4tz52BUFXU8xq6meiVSS08/v4dZ7H2Hl979B4qIbiVdYrJ5kLongcFNeVsTx3m4OHf6QNcuuBlOgqrqUJTNb2bTzQyRJRHaXkc6lKaxpYSyhEx89yvnnLGEyGuV73/8ZLtM66EkjSVWwAN2uERobQddkTp4YJhCoQC4oorAsA+s6kXNhDm5+i0w8io4wPYRD5d3cP3nsT8+STmbQdOuedoaY6J0iNeTG789j1XltLFlUj8c9A4+3DFGyDm9wQSk7tp5if+MMymxwY0kJQ48+Rfiya+ifihIdHqduVhWKy0ZW00mmcgz3hxDwMTY8SXWNA9E0aTqrFbds1bJdHg82yUY6k0LVIjTX1nHOwhm8sXEH5y9u45+b91FVFuSCiy5AN3QMTacg301rw+188MEmCguL6R4YYfHiBSjTjfnq6hqCgVJeeeVVTvcOUllZQU15Ob2n+5g/ewZDYxFKS0s5sH8XTfUNdJ3qxLDLdB7rx+12IwoQ8PsJhyMU5lmR2bK5Is/9LcmL8Umui66n7TKTuQU5ehKluEWFYycP8bufXoiuG0jSNDVWVDCTBl+/fiYb3g9TVV+FXZY+ZrbohomvcTlaTuJw7yCfve5iDvUPUVF8Nmd5M2zbsRmActFJuNCDLBtMTqapdbqoVXw0eD3Y+0xKY1kGhkcBEG0CcVVDTuVYXl+HUufCPexk6dkN7D56GmFas6BmM+iqSng0h69YwhAE/vnBIa5euYwP9+5hdlsbW3d+xIiewOc2QHXisMuMTiaxK3a0KScHj3fhDirUzLREWaeiOQzdZOD0IbJ7XmLwxCn8Hjv2ogrOXXIeq1etRlRkvII1kEcXLJ56Yuc6AkV59J3exkSygKLLLsHI/SfzTRAEAvn5DPT18XpvHzHV5LYb2hGMLLc21eCVNTb1ZbF5nIyPTxF15PPMa6+T1lUcdplSfyE+l5ekZAHszmw9V3y6iUzvEPXKYX7b4+Ibl8xlfEojZ2bxu6zyTU9PD1lNRnSLOOoXsfn3j5DJiRw/M0x7YyOSKDEas85QwUgvozYbTpsd2esiIYocOrgPUZJQVZXh0fF/i6mfGHB/ccdhkhNx9v7zCGF7Ce15Er1ehfGRGItn1BNDByaQRAlZFHkjNsqLUz6ElkLu6ergNa/FZvmvHPJcLgemydj4KK7hIc5MdpNuKscz6sLb0Ep6zIrGff4gF1x4Hq+9+BqXX3UxL657nmee+QNt85Yyr6yUe27/Dm3tq6zuuwhf/voPeOlvj7Fn90HufvBRRAmqWuf9Ny779p17yaoGpgGYcOj4SVKZNB1HO3HaRGRRQRIFBEHGZnfg9XoIR2I47TbWz5nLjju+R23WwJ6JIlZZ38ehK3gdLtwOB8OjxynMz+Pg8V3c+61vc/TUSfYPduPPD2CaEorgIaa4CIVUGtwamaoaLrvsAhoqy7GrU6jTe11wg9+hMJZRCeSX0Tt0hmB+BVOZECP90FAxB4D9hw5T2DqPXCqCqicwdQnJANnUefIv6ygurcDrsuTtf/3TkwiijYNHOmifPQvIkclmMQ1w2L2YkkUNa69roLm+jp5Qht8+/RL1BWX8aTBE0/r1FBb7+fL1l1JZ5GG4P4TssmFKCqop0jeYxOfxkFIVZKedA+/uQxGse84ob8Q0NXKaSSiVY0lDLWlN44qVy1CcAk015dSXlpLVQMRAcLiwKQ42b3gX2V9ES+tsZsxswOfMQ5CscC+byfDS2+9gmALnndVOcWENeX6RpJpFNiVcmHRPpMlT7JzuH8XndJNQcyRzOjObZlJfV8NgfzfR3n6KKq0mbb7XxXWfnsHmvRlqmkvJpBX67DPZtH0ze/bso6q8knNWuYmbVuQuigKK3UZGTeHy5rFq7RrGQqPkxAzhaeBqbmljIpW0tCJ2MHOQVE2O9x4nlVVxTPtmV/oKiM70I78/gTqV5r6FS8iOxdm1q5O25cvJr/Czccv7AEwaKVzhBCmPxngkgatPpbrKw8TkBLIYIDO9kdasXcZQfx/VMxdht5s43XYM3cbBzm7WnrOC4YFxWuua6OuUEb0ikqgyOjJFxjQorjOwyR6yBV7MlEgmZpESTENg3sJGUqKTvR2n+crXb+TqS6/lhXUvsXLlSira52J6C3HJltpUx8RIhZAGtiBefh/57z+C99ZnUA0R/b9Q3C2MMBmLZNERuOSsBjbsOM6VV17A/t0dLF08hxp7hN7BQWRdJzI5ycKmJuKKiKwI6LrK6VPduAqt/V5bns/AwBCuwmJ6lTrOnhMja7cTUWO0L1jC6IBFBgkWFJNK9tI/MEjp4sU0n91K74s7GA+JnOodoCTPxaleq8yVqapkhiCREwROyDKjiTihgV5u+fItLF68mGefe5YPjxz+P2LqJwbcV114IS/89QWWL1/Nrp3bEEWZnv4hvF4HMQx8AWvajDBtBJYTZT7tykDPQTS3nWw2g6JImKZIbrrG5Q/kY3fYyKlZ7E1tLKhrJeVwoNjdYJgkvAHgj6g5jbnzZlNfV8fg0CSlRcVceckVPPzIw9zylc/y9zf/wg03WYdS13VMUaZl9lK2bdvDyc4jtC1c/rGw5V/gvmbFXBwOO4WBIP39/Wx48w3OWTibeGSCqtI8hkYjuF0efD4PsWiEYJ6P0pJiorE45eWVXF9dztDgMKPjU+T5rMbe1PgEhqkxktMYn9pHvsdH1cwmfvfaP5C9drLJNA6nE123YxfBNHIoskRzRTnnn3MhpT6QjSyaqn2sAnR7S4jGE3hFP8PRAaJjhxlNTaIXGRhaD8eOWUpWzRQRMMikUqhqDptNJJ3NIBsmmi1OJpGGaY94m91JJDrJgva50+P1VOw2CbvNTVazpu1Y19kwtDQNZXncetMV/PWFt8nmdE70DBLJpPhwz0E+c8m5nHv9+egmjI9OMtU1zlQkgiNncqY/hWnGcbq9OJ0WEAeDfnTdQNdNhiYSuOb4sJsGwbwgcSNDoLAPRXZZ5GZZQtA1UuFJFrQ1kMxJZNUssiii53KgWccjnUmT7/PjLXTh87lxeXWSCZOqUomt+/rIqhpZVSWeSWJKArmcRiQeY2Jiknvv+zmP/epezjt/NTGvn7JCK+2eVBN4CiUq6wrJb5zDGxv3MLbhLS47dxXZhnw0bYx01o7klNA1jXQ2h8vlsAIMSaLIq5CfV4VpytgE63NOhUJ4PG7SRhJZlsmpKjlDxzQFUqkUmYylFfFICr6jaWzxLM/5m3CkdCbNHOe0LURpqePIn16npqIMuvvJSzlQfHbGu4fQJSfdXRMU1RYjSDplVTr941a9/8bP3siePYfQshl8LjuCqaHYFKKJJG6njfygnzktTewaVxiYjCGZIi6fHTGnEReSyLEYuPIQFQNpmgppE6G/P8Tdv7iJz33xe5ionHvOGjQ9Q6CoiPYVq4lEo9ixMpfE0EEO3XcJ858cRjBMhGv+MA1wJqb5n+huGAZToSlM02Tt8rmsWtnMzMWrefihX4Mp8M62fcw9ZymhiUkC7kJUj0YWlTMn+7CXBXBEUlQ0VnPskEXyiMcTuDwu7LJBSaGHtuZqYlNR6mtricdiJFIW9XcyO8TrG7dSk1/MlA45t4Ld5WQimSWcMFDkNOGEdS7jDfVIkg273YZNkAjG4yiJBPv378fv9/Ozn/6MP/z+D/9HTP3EKFT///4M/7P+Z/3P+p/1f+H65CtU7/zFvVx3+VW43G5Em0xKyKCkTTLZBAcPHmHp0qXMqK9jZHjSGm02/VIyDINkMj3NKDAxDQlN06irr+AnP/gaWjqCNzuFqesIip3n3+kgocm0nFWMnsqycf0hEkkdm2KSm1adapqOaRoYuuU8uGXzelasvoTb/j6O3y7g8bowBA2PXcImS+SJIlPxKDXJezjouZ9Hrg3wjU+tYKh/koqGclRdo8jvYeeug4RVmYCo4bRlON0fY9UVrcTTJsPjKi6nSGGeQu9IAq/Lhm5oxBNZkimdvXt7mT9/PolEgrKyMm666SbeeOMNHA4HiUQCn8+HpmksWrSI1dd+BZtdRhasdF4WRRQBBEGzSg2i5Q9SYLez86N9+Mf34albwFRGRxJtSLKBbHNgSAKSINHYNINli5fgD7joGxxh7fL5HDjRzbe+fCWpVIo9XZ24jAq2797Dtq3bWbysCV1IYOgeEHXKA148HjfFZbOor11A3Yx5XLx6EfULW/G6XeQyGVJxg4KCApxeD8PDw6iqis8t4nK5qC7S8LgKQEzRWFZL5/gZfG4nU6EUrf5qXC4XjiIH3/ju73j8kfsQDQlnXj49h3bSN5ogGHBgyjaS2RQlRQ1MRSc5+cZLGKaEKOhM5Qw0ux9RS6MKAhVV1dNGdCrbDu5n55tP8M6e0wQLyigtreLM6RPIdoWrVszDzCR49Z3t1M5exO8PPIHfVU70+BFaliyheyhBQ7Wbnu5R8pwyp0+PI7mc7HhuK3c//ASnT27jlRfe5NbbvoVXcGH3BmlyTxGRS/lwTwdHjxznzt+8QU6VmUrpZMkRcEtIik5FlY0cClPRDAHFzppGhS/deSterwdBNPHYvdZAcFlAO3KMx9dt5raffYl773yQiy7/FK+89AJeT5DSojJmz2mhpLKSoXCE99Y9x2e/9z3CkQxvPP04eQEfqXSWhtYZhNITuHxFNLXUcPSjE+RyKexagoGeMI8/8iaOkhKy/gADKZ3OvlHO5OxkIikkNYfd0Pj5p1rp/OfPqMiOcDKcoe/QSSrPPZ/6umZi8TjVdVWYukkgmM+Fl17PTXf9HsVhxy6AzyshyTI5XccniOR5rOxseCLB/JuvZXZ+PvmCTlAXyYlWbmgI1l8Zg65QjJbCIA88txFZEKd1KBaOGIaOaUIqlyWTNclmdNzaRp768zZEm4KRyeL2epmcCmFqOoKqUVVRSSwWY6D3JKuu+Sat7YsZObYZxVvKaG83tc3NZKIRCkuK2XlgBzvffpNPzZjBfX/8B4PpMda9+zx6KsGv7vgdD//1Ab557W3c+7v7+fE37qRoRjW3XHU+h48d45Zv3Y6/bi3bjoQwTQ3DkNANg0w2y9N3X/R/xNRPDLifPnEKbXWKIy89T9GhTjw3fAbJ56Vg/lwuv7yOZNLi6OZyOTTdIBQKUVhYiCzLVFQUMzw8Zo0MU3VyWA0MQzDQtCFMxY5kyCgOB0vn1jAxFaf7+CiV0wNuc6oOgoQsmAgGCLqBbhqM9faSX1qJYeoIOkiSZTfgtIPLZUMSFARBYlxI0jzxCF7DRlS2Nk3HgU6Gogn8gQI27NhN0CsiGgoOj0zC7aO4rIFgz0HCcRVZsVNZJJPSBBJplfIiP6FoDlXVSaZMtOnpLKZpYrfbeemll8jPz+dzn/scX/rSl0in09jtdrq6uggEAlxmE5BEE0UCUQRJMJBE0DQTQdexyQrSdD1ZFESSqk7Xvp3UzV/AfXf9mG9/79v43W50UUTVrFQ+mkwjIhGdTFNdV8KZ8BTz21r4+a9+j1KioYZDHw/nDucyzKidw9j4MKamEiiag9fno6Wxld6Teyme5uh+etV1SIqA4pCJp5PYbDY0TSPTZtVcBcMgk8ky1vseWSlDWUU+ok2hwJ+HYWqIQNpI4zZ8JKbtV8cO78XvzcMcsVEfyGNGWTk2ScRmsxOaSpAjR4HXzpqfPsRDP/kO37/nNxAsJpJOUVZcyO9+eQ+TU+M4bP856WbB3HoWzK5CUCBtayHeXEYuPk4qrfK9h3azefOz/P2pxWhJGcOX4ay5F1AlFdFakeOdM+vRNBObGKC2JshkwmqYHdmzi3RKxecP0Da2i6WXr0IyuhkZiPDka4eorCrH53PhtGn4XU6ygoBsOnA5weMzkGWddDaH7FSY7qeSHJnAq5nYbHbMXAwbInSFsHmdlOQF6Rq0hi9/82s34VBE5s+dT0tLDXmVNfQd6yERHuezn/88QcMgK1rPIJPNIiAwNjRC1cxSek8M0ZOI8qXrvsi6V/5G9ymL/nrDTSs/9kaSZQmTGian4hwbnMSbV4TLbRIzFA5t2U3Fpy+nrMRASuaob2rj5OkznLN8ITZBxACMaf1JLKNR4PZjc+aQFBt2U8OpCLhsIg6nC90wMEmQHRzCX+Dntm/ewtx58/jKZ76MabehYWKYJhk1x4cffAiAZIKg6/xLZGyYBiIiqVwWUZMsixFRZ++ek8xqqSUTz3Ds2DFS0Sget4e4mUHXVGa3lLPxPWvwikNx0dN1kujEJHUF1RSXlOEQ7OiCncRUCp/bahBLMRlFcfDW6xtw+5xkDI2dHZvIcwRQdIXrL78GRbewSxEM7rr9y+w9uItD657m4Wc2sG7LGDlVRjd0Mpn/i+wHvpaXR/rpZ2kYHWHr8kVUPPcUtXYfo5esoeGaaz+O1DOZjOUVHU3z4AN3cM+9P6evr4vCwlKyGcu75V/2A7lwLxJh5i4+lz0H9pLRkpSUaFRX+bljzlJuv8/yONm4ux9VEDAw0XUNwTSpDYrMn1XMuwd7GJkyGJoYACTsdhsel0yeVyKWsKKHfIeXZcknebn2Hzj/5UeT1Zmdp/Ctr95IXjDAhUuq+PULb1FeWcXg+DB79hyjzsxRXuhhaEIlz21QFpAYnJIJx7PEEhkkwcTlspPNWECsqip33nknLpcLTdNIJpM8/vjj3HDDDcRiMTweDz6fj3h0Eo8/D5/bj5hL89HWbdQ11/PB7iO0zqyhrXkWimk1nvVMgkRsirmlPt54/ll0xU55aSU9p3bjthucOGWxlERUpmJh3A6TN9fvZuGsSt5bv4EDHQMsDNSSTeWonJEHH8LPfvQce/dt59rr5pNLpyivqcXp8CIIHma0nsX0/mVGSxOCJJCYSLBr50auvPJiYuk4fX197Nq1i4WLF3F4734qA3YkXafYXobTpuD3+RieGMblsOHTfQwn+yj0FAAwFAqhAYrNyVQyhaI4sTlcCMikolOkMimiaQ1HYQNf+OmvGI0n6e4/wKfXrgITbrvrZzz/zFN0duyzZP+Apqf52wub+fFv38amRTl/2WLSiQxb93Tizy/m8d/8gvZ5swl2+pkamGJvfJC1N96FTRZZd+CvFBTVo5WVYAz2U10dBODKGy4lHp3kVzfWcde9f2f9kX5WnDWbptbZPHvP5diaLmUiPMXOTh2XL4XPreD0aQiSgCCIZJIKiYRB0gBDt57lOUvn0+ovYdOLr+HJLwbTQBAlyNlZs7idWU0L+Aev8ttfP815K1fT0z3M+GiIidA7LFvSRCZq8O6xDmpqGhnosYDL0CxmVDau4hLzWXZeHYd2bWdyZJy+wV7Kmwvo2R/HMECSLO8dExFd01j39j46jp6mc/c2qppn8fQvv4PTJfP+/t1cdv4KxLPXkMtlOHLiNO+8vYlHHrwbQzCRFGu/1/nA6zNBNC1jPlkkmYiT0N2EEnGS0TiTExEu8bsY7elhfHyI4eFC9nXsZ96c+RiGjs1uZyAUoX7WbOv7GAbStNDJEDV0QcTImShCBs10IEsGOc3kROcoKd2koSzImnOXoWoau3bvRpEVKurL8Xr9eDxuwhMwd/58yqpqObBFQFK8VDc3suejdzENHaWygUTcYtUEvTIOh8LMGTMZG+1m0pHhxY+e5lc3v4SByoyyWRjTg8n7JybZ3XGS2upa1q5ZwV8f+hYz2s5l/uobeW13GHv2X1PC/vfrEwPuw548FhoJEoF8Vry7mZOGSXT1CkpXrSSRSn5sU5pOp1FVg5wKP7jjO+zatYuyshI++mgbM2c2k80YePKsN+XcmnzmntvGiWMRzl96PiPDvYimidPt53B3Hzdes4iP7htETY6jo+BxKthtNmwy5IlRogkHDHaSSowSG+1Dpg6bw0vAIxGOZ4gnAKfOguTv2Zb3WzLrv4ntgl0AzKn3E+oN0T05waxlZ7NtMsmc9qW4gkF8BbXMmG0w2NWLpmnYbBIbdk/hsku0NjmQRJlsJkdTqYOjPTEE6T+HFd9xxx0sXryYgYEBmpqaME2TH/3oR9x88820tLQwOjrK35/5K06PlxJFYtPb7+F0KuRXFrP2ok+Tp0usf+OflJdbvPDY+G6Gh/fQ5JnN6tYSnn1jE7fcdANf++536Tp5hpYZlv1APJJGkSQyKYOx4XGWXN7Eps4JGucVEU+rLKkNIGgmfwEGBnq57tqbCYUmMfwavT3DvPTy37nqyquRZJn5c//L5HYDQuO9tLfUYmRytM1oJt/lw53nJ5PLsvDspcRH9mPqOR595k88e/cvCPcOUq87Wbx2IXs2dSA5bCxqWwD8jfoCD/6AE7sCgbwi/BUzUTNptMlBTkylmFlViCApkGdNa8o5fZTLIpvf2UD7/Pm89vgvSdi8PPToU5w5eYLtX/084VCSB57aiCyZZBNZkgmNI0eO8o3rP83GA/u4aMUi7n/gN4iNfsxYlMaiWhyCQTgSZk3tDXSEOhjvGkR2iUz3/vB7C7isLciTP3gYm0tCTcbYcrifmhnz2HNikvXP3k5X92nOWftLkkmJvMoAdk8QLRkhlpMYUx3omoZNzaExPbc3o/HqpvU4EYnFEqQyGUoKA4TD4wQ9Cgd7LN68LMmYpkA40odAGfPmzSSjmXQe7sBms+P2SAQK/QyMWLOAbTYbupbj2LFO2v2zueizX6Pn0CB62mTxhfPo2T9EIp5AEkWOnjjFkqULQBa59rJFjPZ1csYjUVJWwyPPbqU44KO+tZVUzgbJLsIZk8suXsmenR38+Of3c9PnP/Px3hQxcZJBFiUEWSPo9tHR1Ul502yyqo7otJH1yDzxm8cpIERFQR1azODe+35FXUsrsxfMY8Nz/+C2n9/JQG+vdU9RRBKtgTLdJ3twuYM48pzkxscR82sRTcvtVTUMRNNgcChENJ7j+i/ehhqe4uixoyyZMYcN67eQzVrZzfa3XqZuzmqS0Qzdx3bj85dQ7C/H7Umybd9Orrj8M+x450Ukv4++/n7mlc1izsXXo5sCAyNd/Mevf87l512FokjkpgeOv7+7k+0dXRiqzhO3fQn36SQ73n+eA4+to+bchZSfv/TfYuonBtxfXPcsHwQLKPT40BvrWXrVJby7+zCXh+OkbZmPO/3pVJIn//hnvvT5rzA2NEJzczNVVVV4PD66zxzHZfORNS2K0qneBLHxfSxd0cDEVA+SLUtVZTWTvSGK/W7ssnXdz+/7FrWVsyivacaQRHbt28ua5cupLi3ho0Gd1Q1F3PdWFxUtM5mMRvE7fYzHLbvV9sgOShtUDv7uN6grfkUsa4FhcO5SapY5eOadDhYsbeeOb3+Hv/zubhoblxCPjPCtu+5lYjLEzZ9dgs/vIBDwsniWm1g0ikuIM6tcJKKW8uMbq3joFYuyGYvFkGWZ0dFRCgoK6O7uprGxkZaWFvbu3ctXvvIV3G438XQYHZU/vvIqumjHNEzCQ908t+kdaqqL+eqnvszRY1aaOjX4LmrWJJnJUOIWWd7WwIILLmHbe2/js+lkdev7SLKI0+fAm+/m2qU1uJUEc8olRKmC8ooggYJyhoYt7u2qVeeDoFNaWoxh6JSXlxIKTXL22edOsz3+k66qaTp5pdUEFRuePD8nT5zgRMcR5KAX0SFiyDqmrFrOgZrG0WP7eOaFjay5uJ1lsQznrm1nIilRFbCm97hKZnCwL8w37riL9/98H5Ej63EoTs5rdmOUFmKvX8KpvW/T2beNS1at5b33NrJ72/sU+rxoo13s6B6iIBjgeMdBvEErG3jyuU10D/aS5wkwlUzx4aGDpFIZ/vH2P/nNE/eTV1jCtn1HybeXYYbC9Hk99PYcZ8uOg3j8+biQ093pAAAgAElEQVQnc6xYeB7rdr9Mzm/9nn/79R1UralAzKmIiQgdAyrLanx0Tercfts3MAxL5FbvbMDlspHtliktbmDAHgBXMXrKh2HohGNpy1MeWFRfwfGNWzj32iUMpyfxZso4tH0X3d0hvvHUThSbyLO/WYdBGkEAWRZJp3Ls3LmLmc2NFBQXMjY0iCl4KCqwXhiC7MTucpNMRFCTcQa6+6lc9lm2bP41TYubcE2/WNLROJIkEYlmeWP9DnZ8sJFwrgLTdFFTNYtIfw/hXB/9XRE+6tlEXXkeLXObCeYFCfodLFveRm19AeGJPkZGLLO66PgY2bSfPJ8T2WFwaPO76EaU0uIyTC1HOpEgEQnj8CjonnpGTg5SUuKkqbKEytIC1NAQS88/m83vvcu2bds/3nMpQ6f7vVcpb25nfLiLArOAEqdKJDXIrkN9NLbORUbk6iuWkdWTkMvQe/A5DhzYx713fZ3bf/oHnLKff9FABnt7EOW3aG8Zo7osnwO7P+TdrVHaz12OLCR48YWHAPjug7/GEEyqGyoQbDqyYqfOXstd3/k+m3fsoH3mHA6dsFTJacPOitZ68tweEtVVfLDjCEcViTxRRjmwj8L9//y3mPqJAXdj4RLe3PsR6nAv+ROD7Ok5g80X5FT3GS66cA2bNlsK1W1bNhGNpBgdPUJJRR3xeJyHH34YgCVLlrJ3/17WrJkBwGBkgmCghMd/vZGifIG2Oa1MZLsYHJhi5rzFCIaV/o2NhRkVwyiJLpxON4tnr6QaCTsKD37pbPbv2sOPrmrmqc4cdoeH8VCC4pIANl0lePiHbH1ziML2KnZXL0VKWtTBrmMDLDt7Lj/8+a2IpsBbL/6ewob5PPyHhziw7xi15WXsP32Se75/NWWeHE6nHUlPMxqTcEhOAnlOvI4Mv36lG7vNekzXXnstp0+fpri4mGQyycKFC63GXybDgw8+iNvtZnR0lK999yekMjFqa2rp6enCNOHEmU70VJYZzbUsW7WKbCrBfXf/kBxpNEwSuo2dUx4cDhedWzfQMr+de+95hGcf+yoAokuwjKcEnR3dozhlP3llNYjIZFUbNruH9jYLYBXFhSBY5QzDMFi8qJVt2w+za9culi9fjqZbEU8up5JKpchpWSrLK1BkmePhBFm7jJpOk+fxk81miSajKDaZkuIgv3ltEw3VRdiqJTrUfioGilHyS1Dz/QDUNs1m3tr57Hj3VepnziZbMIiRSjIyOUjN5Q+hZnOI+zZw0crVqMBFK1cTH+ghGg6TSKQI+v2k9RzJTIZyr9WTOdJxClmQ+PzVK/mPhx/m0M5ddPcN8uBDT7JwXjOJsSFyephsUiK/vIbRQ6cQzlpBRtXQY3HmzlvAX//xKlULmnDVW1zzr1++hLfefovQeJplC2q5bK2Xt7d08LYYQJEFNBNkSWD01EFEWcbn89DXfZw8OYcmCESCl5G1VYERQzes/sDRj7Yz96KZ9Mcn6BoaJ1CcY8aVZzPfZSOTOoZpWCWhf1lXG4aBqsc5a/lSxkMZ4rEImp7jquuu5w/TZ2pm2yIikUmKqpqZ0dLE9s1biE5G8BRWYTfsvPDk6x/fyzRN/vLM81Q3zWHxsrW88tomBk98QGX9fMrKS5ka0mlrn0E6p7Nv2y5Wr1nF6aERqmqqSaQyfLB5H5desRBb0nr5Hzncic3jxmV3INokXnj8J2hajgce/QedxwdJJ0JMJdIsXtrOwKEjrFi5irrmOeQ57bgUBSSdHXv285c/PkVowBJlZeMhcokxrrn+cnbv6eOWzy1jfCjOaFhnvH+MgjwPKV3FbXNQrsQRC7zYRRdT4TTRtIA72ER5bSN1NXXs27sX4pCM9KNlg7RXheiORxG0KHPK87CFj+OI2VBNC2d0ScLnURAwkQJ+Tm/YRN28+TjdEnc9eBevPfUadz14F2BlFitb89mzv5v+t7aweOw0F1bPwt0/TEyH16X/MgLyf7P+LbgLgvBn4BJg3DTN1un/BYF1QA3QC1xjmmZYsEjovwUuAlLA503TPPD/dd//94onIoiSQXEwgMvpI6+ojEQqTTyVZN0rL2OfnvKjZVPE4iMUlzZiqhpvb9pAODxFW1sbJjpbtu2ipr4dAAcOhIxKxllEZ1+Ii66q5+k/b+DsOWVE+oYYCltS8C/XNNOTSePwq8yd08rqtcuobmmhf3CUR/++A684SdgsRJSKSKezFOT7yKQN7Kd/wEheG0J1iHiPzExhEcca9gDw6Pr3qfS6yN79qCVzFwUEUwRT5/F7buXyz9+BJEoIoszBnhRnN6hIsp3egUF0HSoK7eQMAUEUsU/7wKiqynnnnUcqlaKhoQFJkpicnOTUqVPMmDGDUChEcXExCCIej4/6pkYqyqswjBwrV57LeH8PpRWF2BQFW9Dy9tb0NsYjCV7+8Dh1FQU0VgcpqW0hpaZYvORszgxYBy3gsGHabUi6iS7ClENGCUdx5xVQWqBgM1LEYxZoSJI1E1eRHaQMjQfvfwxTzbLsrEVI6B8LzQxDw+aUGRsaon9nH6qqcrzrOGo8TZ7XhyHVIwgCuZyKotiZt7CVqbEQZRUlNJdXkNdn4LYr+K+oZffmbQCULb0aOzor11yPyxihY8f7UDyTSt8C8gJ5DA2Ogc1JKmeArqMaAomMSjYaZTSRYGZ5CYLDzqaN65k1swWAi665hPeP9PCLu29l62svk++1U+XXcSkmm/76V/708tt4nQEC5bVEhroJOB3sP3qUqsoy9h06ilPWaayvQU8V0Ll5Whw0PsVEJEf3hIpujrFmuZcbVjXwl8E0ZVWFIJj/T3vnHSdXVff/97ll+uzO9pJt2bRNr4QkJEAInYDS5VEBC6g8igVFUAGxgfhDiiKidASkKzVASCAGSEJCet1ks8n2Ojt95rbz++NOYmwP6qNPNO7n9ZrX7D33vHbO93zv/Z5zvhUVhTiSQCBETKqMrSmnafx42gbjZLcuw6meT3dMQ+Rj63urc6RiKZoagmQMH+GQik9VcRyL7vbnQHdVmwdK3ZmmiXQcvnb1NzBzGS792MUIRfCDb36H//roQjZtXUdJeR2xdIp0epAlLzxKWUUtU8bO5C0ZYWBfD8V6NR20ul4nUrJvzxq2bnuPV563WHDchRRPns6qVUvZvV3jhz/4Mc/c822inXs4+7zTWLupmWDIz+69O9FlkMs+9xleX/k048ZOyz/vkhKPZPrUETiOwawZJ5LNWUyZfTxZx0csEyCRBkfVKSovQfN6qCkv4pJzz0LVAlzyqYt5b+smzvvc5+iNDfLrb3wDn53iwvMX4ff6GTt+PPFYjCGjn5Z9O1i/Zg3CU8pvXnqRE2ZNIZXo4cSxRQz0DDA02M0dXzyNl1esY1/LfhThRTiu8ahhXCMBLUcmO5Gm+nYy0x1efCpJ/5DO4tMWcOz8MBdfugnN56GwrIxsMo7Ru5uq+nocaWOkc1x63scYTA1x6Xkf45qbvgdGlo5mm7BWhllQjJMzyXa1URJNMOSX3Pijb7HsvC/8jzL1r9m5Pwj8FHj4kLZrgDeklDcLIa7JX38dOA0Yk/8cDdyd//5AtLXvxuvxUFxRDT4fQ8kEHt2DIgTBoFvhBCAQDFNVWc7QUJRg0M/IkY1EIoXYto2Ry9G6Zxc/vMld/WqqykkBBQX9HD9pDE8+vxlbeBndOBpbOBhRV8gETj6OzIYtvLN5G89tbub+TR1MGDufsM+P0MNouR7e3Z+GUjeHRs4wSWcziNLr8Lc8Ss5bQerExWzt3oRHuLu9nSuf4tZbvsn7v/sdQ31DLL5wMZHCagqr6ggHw+RUi4jQ6e5J0lQfZNX6GLFUhurKAkwDhGpT6BNkbUim3J1uY2Mj69evp7GxEa/XS0lJCcuXL+eGG25g2bJl/OxnPyMUCmHbWTdfPAKv34uuBbFth1BxOf5gqbvQOK4HzpsrthIJBgkpMZych/IRo1CzCVYu+x17dq3nExfUAuDTwBfyY5smZ501Dq/qIYzOW8+9x7FHnU9b+256YnlDtmmi6W5IeCCgc/rpp6OqKrZj4TjOQeFu2zY2FuGCAjRdxzByjB/fRNdgO9lchuhQH0VFRfhDQdddLenQ0xFl8snTyQxIkqE4vUMGVa3tlCnuYqWoCj5NwRMsxnFC9MVfYfHFFyCNNCJYQqKly60/qwgyRg6/x8cFF13MXT+9DWN9M1ZTA51DCWpGNB7M237SotNIfeV7DOYKWfjhs1EUDY/u4czt/Zzzpa9yzpe+gaZ6OOMTi7BiCapLSjFTvRx7yqXs2dXMhm17WHzqKbT3DXDNgo/z4VevIZU2CIYDVFTrmEaSJ5/fwIlHV3HLpSfz7L7jMS2TSGEhv/jFXgyPn0AgwD5NpTwY4agJEwlX1dC8P4foGzxoIGxr7cO0kvi0CIN9BoYB6SykUxJHkViKu/j+fnF1UFWFL152JeGiCnJGlqamsVz4X6dQV+qmSdi6YQXjph/NzvdXotoKRUaSDZs3Yw620CGGqCpy5z3nWNi2zWcuu5wbv3cDvnAxy974FXW1jVSWl3PpJz+NBOZMiNDdtJCtW/YQzaSI9sZpmlTF7Nnz2LZrI6rQaG9z1ZDf/spiRlQGcPDy6GNP8dzzvyAVjzMYj/Poku2UDaRZtyFG72CcCePqqagawa6WvXz52zeRjQ1xykmLOOGkU9jTsos39rjpQ7Z2mGy98w18HgeP6hDP5HBMleKyCHZ4NGktwMTZjeS0vby8ro+tQ9DdpdHbk2T+/DA5M8ldv7iNzu4EP737FuiHo2dPoa5hLPs697Ft9RqWvGIzsaaS+iKd/s4oCdtdrHK5nBtpHArxwpMPcP5ln8LyebDNDBPHNbG7ZScTxzUB8OgDt3DPzT/ltPPO5rWHnuG4igqC+zqwmibg9Wls27H6A2XqBwp3KeUKIUTDHzV/CDg+//dDwJu4wv1DwMPSdW1ZJYSICCGqpJRdH/Q7xUUVBEMFOI5DyF+A7Zh4PSoej+u/3tvjFoR9e806BqODFEQiSGw8Hg9erxdVVenr7aYw6MPIuQ9xWSSEqqhMGj2F7GCMERWCiY1VxCwvOVOhNK9XvOlXrwIO1aPnM6qyioriKlBVUo6NyCh4bZ20A0EhsBwHUwqKQh78pYW0vvkg9hlvYSZ7KKq6hGTew6JpwbmMWwCnX/pFbDyUeFQCHgVHuvViQWBLgUcX9EazaF4f46v99A7EQdrMnlRO8/4kHtvByrsjVldXU1FRwTnnnMOnP/1pHnnkETZt2sRpp512sDhzQUEBtm1hO+D1etG1/DFQ1dygTE3DcRy0vOC6aHGQeCoJaR+zR48iWDSW5n07mDZ1LG9vamZwyM0vHSgOs/iUubR37iWIB0UxSaYCFNWW09PRTnfbLnbsdcfp8eqYluXmuBEKiq4fLHJhmubBEnXZbBZU8jUtJUIo+H0+yguqcWwH087iOCa66sGUFt19PZyz+EyeeXgJ5378JAgUIcqCtC/ZQTgfxaviICQIS+IVkjM/+VV8upe+wQ4KAkUkkzFM06R3sJ9kJk3IHyDg0Zk0fTrrV67A29uN7g8wdnQjW7e5ObNfe2kJd91+K9dedR2xHAQDPppqq0jbkmh0iGQ8wUC3m5cnYnkoVwsxDR+5zBC9QykyhsPjv1nC7BlTePuddwFIZnNs3tpOb0xSVqhSWxHh9TWdNE3ZxKxJ8znn8z9CAA21n0TBwsymSPTC/vd38duHWwiWNWF7qhCZ9MEC6sXeILsG97PXo1JdUk0iZ2ELm1hqkBEVdViam+hKHHztdUDS0rad8SGDe37+bbJZN4VwLu9faVopdF3DsR0KCgq4/oobeWDVO/zou1fgjA7jlSqXnXElpm2Ry+WYNXcev3n+ZZ577hlisRjnnXs+QqgYlolpOKzYncabjRMwk/RGkxw7o5HujGTte5sorvYRciLs3eTqnVtbdjJ9xiLCBWG+e9NV4Aiy2QgV6RTX1pawcdN+dre8RHlQgZxC195WPF4PqgMFmo/HHn2I+rp6AsEgc2Yczb3chW2aqEIhkbZdV0pHw7BNkh2DBEMVKJaD5qgEQ9V0OhZpRcNUBslpaVK2QnPXfl589wnKSwvx2G6ivHlzJpHM+LFMPxuf8lM90s/Oll14Bjz07+/juEWu26IiVAb7B8GxaSwayWBrO3pBMT6vynub3ycW7aSwyK1zW+gt5sobr+WJx35Nl8jQXFHP9MUfZsn6Vcyfv5BoascHidS/W+decUBgSym7hBDl+fYRQNsh/drzbX8i3IUQlwOXH7ju629HOuX4vWGS6Tia6sHnc636fr+XcF7/OWPBWWRNk+efe43Onr3saWmhp6+XRCqJV9eZMWs2Z526iMs/+xlKikqxHYdEOktRdTWTSjOg+Eim03grilAGBv8O0hUSGYOasiAiFiN+yma86UH6tFGgxQllXRelkKpjOQ7+cAGOBNuyQCooihv5nrElhm2xdXsH3oBKQ30lsUSaMQ1FDCVtykIqSq1OMvv7lAZLlixh165d3HXXXYwZM4aHHnqIVCqFrut4PB6qq6t59tlnmXz0/L+amobyaZh2Hzs7O4jnLEJ2jCKfQmEQrv38uZjZlr95hjo7O6isrARFwbFtJNIV7JaBpmkHhbuUEsu0/iAnkLAlmqZgK2BLDcMwScYNdI+go3eIux56lNPmTMHotNiT2kVjTR3ZpMV7+11BrHo8qHq+mKEE6VjkTEm4aiSWorFj83p+9/ZaFtVMQ1MFWSNNaiDJ7BmzOP7YhZSUltG6v42BwSh9STe2QlVUXnn5Fb569RXU1TfgDxXy+quv88AjT1BSXkZZ1QjSqRQ1thffqHLSQiGQU4j19zBp6jTe39zMQH8Pv37ueV7+9WP86MHf8viStRgJC9t06I3ZSJlClYKBWIYJHknjiEm8v24TdaW9SI8Py7EhqbJ+II0MlGFkDIJ0kDN+79qX0SyqyxqYObWSrs4UBQE/kZIIeg/09vUhAq6QWbb89fz8G/8jHy//5LVoKDhCQeKqBW9d8izxzhZiZ59DnebFMNz/4fV40VWNr1/1Fd58exknn/FZAoESHnn8ZdavWcqJJ53MohNPJYWXaLSLSHUJdSgIM8uc+Sewa+f7TJ0ym0d+8gAjp0wAtnPnzx/nkSdfp7jIi2Pn0FWdYDCIkAbRgTSarmLZGrW11SxfvpSB/S2Ypsm4sZNpmtLEhPGT3efOSPLcU26K3GzORpEmHl1HVQVSClSpYZomRs7BtE0sYZHof4fqsgLmjh3HxPNn8srLL3PionnMXfAtYj0dTJg2i87PD1BbXouwM4S8Kd7atBVVpKgsKeczF19KZWU1v3pqGWvXueowyzAZiruFewaqSlm+/HW27d2OWliIjoliO+i4KrNgJEh9UQHXXPVFent7efDxl3lz1XvMP3Y2JaUhcEZ/4Hv4V6UfyO/cXzxE5z4kpYwccj8qpSwSQrwE3CSlXJlvfwO4Wkq57gP+v4yMmOP+rWksPudcnn/+t2jSQuAaFxThoWvX67y5vxs0AZbENk1W3fN5RoyewKgzvnSwmLkEjq2pYNnzTxIK+tE9KtJRKC4uZufOXei6RjQZR9c9nHXBpVx7x+dQFQuv3334HSEBBcPM4lV0hCJRhOC6y+7+c2N3C2Tbvy8GcMC49NegoKDgD5Kd/SXE43HufuktpDQIBENsXf0WM+afTNa0caT7eznbwTFM7v36f5POJF0ViJR4PR5sx8Hn9YGVoixSgFJWzasvvXbQxVQg8qUB83MopRvFl68Zumdfb/7SPXUIIfM0ivyMu9+j6supr68nk7EoDkaQqqS6dgRjx9Yz99gFLDzmRCQGDQ0j2d66F8PS8GsGhgALCx0/DgZeXcWHRTpp8Yvbb0RRVRzbJlQQxnY8vLn8d4wbO4aRjQ2oqoKqanz9upt49PHHDo7/AB8G+tvxF5Th8XhwHAfLcojGW91AKKHk84CrgIbtOBhZC4SO7WT57rU3M2byVOrq62nethkpFTKZLI7I8eoDN9BQOQ5DhYGBfm574m0kQRSRo6ymhojuQw0HcdQsZjaIYajEY2nu+M7l3H7TbXzze99i8XHzSZqSb37/R2RsgZO18Aa8jKhrYCid4ZZvLCKVzBAM+fEHdYJBH4WygCmTpmM7JlnDYWBogKu//QBnff8RVFXFcRy8fh/pXBZhO6jCh2nm8HqDPHvNOXz6ouMonVZK/4Z+4jmD0tHFLDjhI4xpnINQlQOvEbNGjeKNlm9jSpNSWYP0O2RFFsdIoksVS9qkpcWpo75LX08+I6gfNE0lmxNkkwZXfu1MhhL78IpxzJ+/kGsu9SFzBkLzE48JCopK2Nbcg6OYVAcDEE0gyVB6wne54vxziBQp9HQOsWcozcLrf8lz99+FMDI0jGzEHwiRy9ks+8k3QRM4hk1hRQSZzSL8PsjlqJo8AqsrStyA5l3d+Wedg8+8k6dWybdqSAxg0cUnU1IXoXF0A9s27OKSuadxz4vPMe+EOWxcvYWiWhU74+eh7z3Ia7+5HgBVUVBUh3Qqg66rrt+/IlGkyvFnfh9bSuLZJJd//nru+cn3KPQHsIFEOsd1372ZO2+6HoFAFYIzzz2fmTNnUF1bg0fRWPvOKkxb4qhgZ7L0JBK89NTj8E9IP9BzQN0ihKgCDuSfbAdqD+lXA3T+Nf9Q87hFLqSdZeGsSax8+UX6sw6OEGiKCtJd0RzJgdyeaMKkc0hnYPVG7NK3GHPUcbil7dz/6SgasYxJIQq2ncPr9RIO538nEePAaqAXSXzCh2VaOLaNT/Ngm0mCviBSWnTt6UWvLP6z41ZVBcuy/6R9yJYUKiCFu4M8kDEyKwXg4BeCTUlJIpH4q4Q7QPfutdiqxpSjj+H4sy4imY3hN3Q3URY2Ts4ik8vhSImQDpoCihSoAlAVxo0dz8iqICIbozfmBlYEK0tQFRUUDV3VEdIha0twTDyq5u4Y4ZDF6oAwlwih5ttd4f77lBDwkx/fwv0PPsJgYpDiimIsXcfnDfxBrdWAruDXbdB0FNsmZEiknsPOZtm4aS0VlXUEQiEcW8F2DITUSWbgkSeewMrZNO/rprR0I+eddQoHXtlD9ckH1D163tvIXYhVdF1F87ql2EBBSBNHOAikm5pBEwhPAI/meuBUV5YTCgQpKIwgUPD7c6DYZHM5ujdtJjOUIKHYdGxai2VaaKpD63qNUcWVxBUwiGE6aaTQMPMl5AqKQiiqyvNvvc2tH/sIT933E1asfp8T5s+lTPHw4Wu/g3QcFBV0XXXLqKoCVVVwDBPTyqGqqkuTph6kz7IsDMMgZeYIerwgVASuelNR8iH3lT4yhkRW+oioBYSKPHT2D9Iwyo2idlRx8B1KpuOoXofnH3uX486Yw4DaSoFfIyf9aF5JOBDJ/7aan3cT29Lp7enHsSzi8RRdbQ4fuWA+Tz/zKCHvPOJJk9KySubNnc6WN3ZRV1fMpnVdLDh2EkElQ4HubrIiRT4qiit45bUV1I6fyMZ7v0l8y07OOroJo2sduaxDdiiK4zgUFRVhxRP4siZZXcdIZjCzJv2dUWrCJeAzYVe3W+T8kH2XIoQrBfJtDq5Q9AR8SCfHUG+Oz130RYa69pIwBlm1aTX+sMK+jiGSQ64aUii/n3/bsQmGQ0jbJpNLoyka6Wws/w6BR9dZt3kLl175fVTVQUWwYtVyPnHReQhbckAU+ATIXBbFNPGUhSivKKG3uwck+ItDCI/zgfLi7xXuzwOXADfnv397SPvnhRC/xjWkxv4afbs7EledITwqveksAzkHVThoQqIJ1zgIIJW8MFEkUgkxbUyE3q4sne89xcjZrnA/gHCogqeWvMmC2U2UFGhIYRMK+8gaDtFsilFe18/djqewpAevHkB4JaaZo+V3HQzGJSGZxbAMJn244E+GrEqH8uIi0Lx0dna7mSHzYc2WI4kDQSHdxQlIOg4eRcGQCquikuxfCjITEindnYAjdWpGVNHW1sqERSdjmxYFoQJUAQHHj+kRvHbz5wlNXMj4eQvdo6ZiI4QCSDy6j4xjMaK4iO9c8xW+850bSHbvQ+ajGn2eQhTdRggPmq6hCAWyWTTNj4LEtgzcekQyn45DMhTro7Ozm1DQzddeWFiUv+/OfTAQpmlMA7f88Hv4fG6Khl8+/gRTJk9FKBYyf8pRpIEqcnzz6zczfmQjpYUecl1d/PC+x5k/qwnheHCUBN6yanw+lWw2y44NO8ilDHSvB6H48fp99Pf0UFbhBq7pujvXquraRxLxNFu3bmXC9Bno6Hg0D15Noa3TxjLdeRKKSUGojmS6G8exMXIWOaPv4KJdHimnf3AAnzeAz6eTy+lkswYd3X3YviAJj4kuFC488yx6Nr7N5LlTeWpZCxMWzOWlZ5ei6gWcMKUUzbYZiMZ5DXh/7UaQEiOXwQoEWPryyxSE/Lz8yqscP3sG7y55hrLKRjw+FcfS8Pjc6OiAX0PYqquKUTSQWbz5VMvgBul4PB4UywHTxtFMpG2ian5My7WfiO4s/soQqe4sQ7k4mlLM9OnF6NJBqCYH12tACEgnTVq2d1JYspNwg0620CRQkCGgB8gkXdVmNud6npkJSTisk8lk8PhVdN2Lx+tl955dzJ97PJ8/dzTSAYnKZV/7EeWlZaxcMkTA62fmSJWaygJ6NrnGz5KSEnSPQ0VVhOrSIMWFHo75+DkUk8SjBcgMxejp0hgaaGDV1t1cftGHWfrmSmZNGIdlGwTChQTCYfr7BujZuv1P31/AkhJF8yBtC4nEka7vUTZjEdEi7Nm3j1gyzZzRU/m5HqS/qx8rk6UwUIISd4W7ZbrfUtMI+r0oikJvdICAL0jvnnaOPv6oA681OcPi5BPOYMeO5dTUT6ejvZXRdSPpiNs89dbbnL/QVakapsFHP/pRfnnPXcRzGWQ8jfT4wYGiYo1JRYG/IDx+j7/GFWgRA94AAB85SURBVPJxXONpqRCiHbgBV6g/KYT4FLAfOD/f/WVcN8jduK6Qn/jAEeTx26cfACAcCvDIQ49x8/VfZtnKN1m+fAXYDrbp7txty13dpJQ4ioXXB42N5WxuyZLuHcRXUsiBsit7925m5dvL2L9vO5/6yBkkkwmSyST+UCG1pRV0J9wVtdDvobhDJZFIEwp7GOjsJdfRTnlJEZHSCKvWtjLd+tNcDprPxymLz+Cqq77CpIluPvegqpCwbaJx8PtB+BRwJEEBXkUhakmStkPEp5D3pPrTOUdlwoSJLH19KbrXh6Z6iER8aLYXaSsouDtsU/Hw3nP3U17oo6Y2iBAalpSoioLf7ydp5jAdg1zOZvL4idz43e8z1LoX1bZQfK4QnLbgGDQpyWTinDJ/Djv2drJ63To0TAxyWKYf9ncipav7l0Kys7WV6RNH09zaycIps9jbPohtOUjp7iZ0DUIRL7t27mFEXSOZTJajJk0kl4uRjO1k+Wo3gGrzyhW8+spr+IwYd//0ZR6663vYModfUejoGiA6NIQmLeaeXI/jWAS9OsfPHc+nLx7DrXe8wH9fMZ81b7diyx7Sqd/vniB/0jBV7GwSzVtKWWUVVk4hiInhSGKxfmzbLcsmhEpry1a3Dm3IxDRtHMfByXsU+XyuYbqyspKBgV7CoRDSSbBh7ftMnjIBpIrf4+Xeh1/la5fNZstAkGkzj+bF+3+DVezFcjSaBzS+dvGxtG/ZxQ8eW07OzKEoCl6vj7jfRzgYYntrG3XlxTR3drLq9ltB9TFjlkZOlXg0V8BffMolPPbcE1hWXmA7Dsm8baDQ78dWIIBNdNcWdnbtp7pxDFlbp7y6ARVXIIyqradPDjCqth6/bbF9IEZtVROWtEkMdlPsL8bxuqIhHC4l3tnGO+/txB8eSeGOAHMuLiYQtLDsIZDuSXhwwD0JmqZBKpVC4LDyreWcc9Yn6e7pZuvG9RSOnMCzj2xHCoHqUTn/mHnoqoYmwUkbZFpMlr67gy2b88ZCR8NRNSpKK/AXhCipLKcwaNO+L874hjLiWpqSihpqKro5q7iQ3S2tnH/2YoSVIZGIUl5eQzSdIBKoIBuLsWP/Hxa40Pw+vvq9m7j161dhSocD22YJWGmDlu37EZqfTRv6afEPcfaCxXzu01ey/t313HLdtbTE3MVS5m0emg7+YF5OONAyEKJ0w3OUnrko/4uSzv4Eo8aPoay8nPc2vcf8eSfQNdBLAof7Hn2B0kLXtjh3/jH8/Bf3EI8lSBgOF1xwMeHSEM2b2vAFJOvfXfrnhceh9H1QBynlRX/h1qI/bsh7yfz3B/7qn0GR133wor2DWJkkD933E4pLi/nUR89DUXTWrF3Hsrb12LZEKA7SkeAI6hZ+nLKhd3n8zdfpu/M6zr/hpzj5HaTh5Ah6VCrKy7n8q9/ltSduJRT0EI8PEPR4cELubm/b5n7Orq+ks6uLRMqg0OPl9DMX8epb75BrCDOhYhKdXUN/MF4hBE1N41m0aBE33/z9g22Z/GnJMCyCXg8tvVEqiyKoHsjaoAsIKAJTOHlNgoYqJbaio4gclWVjWbDoBB6+704yuRTpdJazL1gMgOLxoiJQNQ0bjR33X413oI3q4lIG+/oprwPpSNcdULUpCXkxTMmisz7GoFNCRfkA6Y7NDGZ1yvOJwypHjGNEkZ/PfeQcMtkE9z/4GF//5GfY3N5Ox4DrZvf0hu15m4JgzfsbaRrbRGdXgtqyMjo6++nr6iBSMgInnzjMNE1SKZN33lnL5dNmseThpyktj/D6S79h5KQctZVVANx+442MG11Hc2+a2ooSvnPjLRT2p/jStPEc//2vYTgKl3zksyA1wAKpkc6meHvlbo6eOYHVa/pJG14cxcI0XH1qNr/bFhbYMs1bW99n9YpV7GvfR2GxlxMXnI5Hg2C4lEw6gaJpBMIFPPXYPQTCBQQKSvjweacjUPOnH4gNdTNp0njqRkS4/1dPkRoykdk0/dEiurtsKiuDlJdV8t07rqGnpYXGEi+h8gpGTf4KU2ZOobaiAtNxTwregjeAn5Exsq4tSREIw8yrTQSq0CgMednbkaZ/YD9HzZuIplmoHg1dqkTjNrYSxJQO6WyOoVSaaCqTf+YMpJDUVobYm9xBWNoMdO3AdIL4sSgKuyqUTNBmUuMYWnN9REr91K3vYunNX8BjpCksDSEilZQE3SCZdCZOR0sXn7niGqZMHs/NX/kMpyy+k4LKvQxmVXSvO0cDUTd4T9oObR3vEQgEiEQipDJp1ry3joG+fs44fwzOjj7eWbaCjrZ+goZBqjDE4gtOJxzxIhM2PUMxKhoagA1MmjqDF954iqOPn017eweWYzLQ10dZWTGqquEPePH7FV5fs5lxI+tZMHcW2VQOr64TCpXTF0th9/fzTns7O1vyfh6HqGRymQyLTz+Dxx58mnR/GwNd+w92cbC5cMYZVGwdoHnnFnomn4zSvIqvXvFFdrauR4QCNFSMYsP7WykMubs0v9dLqd+PpsD7+/bjOLvpnnAGnf3u6cZQHJa8sZk9+1pA17A0nXd2bgckfV09VFRX8dzStwEoK47QvGMr0WgaWwhuu+lWelIG55w1g+6uZjJG3wfK1H+ZCNW2NtfVsbu3l607d5Gxcpx52rn09/ewZet69EL3YTsQLCHy+tSkfzQvPfkUJhbHnHkhg/19hItc/XhHx3Yy6SwNDXV86/rv8I2bf8nZx43FUgSmIYjn3N1eX3SQbi84mRiR8hIGu2PQ20/Z6Bo8QR01oBKN9RwcqxAC27Zpa2ujqamJ++9/4GC7KxBs+uIZDNvk0rd28NJZM7nlvVYe3NnF54uSzDxqHpMriojlHMDDmNlncOUV13Lzdz7D9DEjGNVQyobNmwkHS/jYRz/G+xvc0OnB5tUongLKI1PJdu6iwEqhlFfhDep4G+bn58c9RselhU+RfPrSyznz9A/xhau+jKJJYmUzGZ3ai511j9FBXccWKpu3bcM2sowb20RzWzujqivo7hvAyUfXOdIV7plMlDXvr2LZS0tQhOTCj32CoA9CxVXI/E63ZkQNiuIgpat3mjh+DK37t1FbWsm+1jYWn3Q6cCMFqoLMZKmI+Fmzrx09nqF+TA3RmbNxdD/SNjj5tJNJGv14HIGpZKksdOjr9KCFBQ4JDCuLZnkPZvkzjLwe1DZZ8+5TNJTPYb2zCpskFUU1ZEQGMy1pnLyQdDqB5vHgCxTwo/tPJNbXzitPP8vYKSeh6MqBrLCMrW+kpq6ekXW13Hffidz/s4fp7OvhN2+vYe3eKI4u0eLtfPPbt9C5q5WUKph5bAQj1UdiqAqrvBxN9aGpEBl/nDtO2wEEY8ZNI5pI0tqym/G19ezr7qbRqqC3tx9VESgChAKKgOyQyS8evZtZM6YhFIW+gSFSqTiJtOuxEg4GKQp7SRg2/Z1DbF2zESdnoOgFxGdNY/bRcwGYMLESqahMmFhJRnGYos8g2rqHwf17aJg0lmhWsnele7qSmTg71vRxzFHVvP76qyw6+78YNNKsezTF8ZeUks25O/b+AXdxta0sXq/XLWqDpKOjg4aGBnzBAD+78xbuHlvGyeNH0VdZy44tHWR8XqzXNhPTNQyPhloYZFtPKwBJR7Jg3iI2bnqPqsoSco4klzZQNYvNWzYw2DNIXXklEZ8HTTHIGDbScRjoi+LRVJLZLLYm2bO7m2w+VuRQ69Zll1+Gqul07d2Flfr95k0ACz99Mm/9/A2K/QVUUsSedct55M7v8LVPXYZnWg2RYAGpmPs/A/ncT16pYGQMpEchnkmTHkqT84dpacsnYZMqvoBKWSRCW2c7BV4viVSatJGjKBLBVxjimOnjuQt4653V9PQMoDo2Uti8tewl2tv28PSSN3nsV0uob/qjorB/Bv8ywr2haRQA9WNGMueY2WiqL++Pa5HOxjClzquPP4CN6lopD+jgTcmxF3yZkXt3UzxmMi0b3iUww32Ig8FKfnLbRfzu7d+xd8cm6uvH8M7GfubObEIJgm66DJWa4P3d3Qwkh+jb3kqh5iXY2UvV8ZMZikbJSgXLyHvRCFfpoyowfmIVHe17WbRoIcveWIGU8qDXzNJ1r/Hib57gnNNO43PXvYinuhL/QIp3Js7l5RUbOa1U8uGZx9HSEQWRItoZ5/RFp3DRf53KV676Bo0Nk7n6Wxcx2LP34BNZOWEORs7CFvDgD65jYH8zpx07hd2pEk4/vYjWlAmo1FeEmVDk4aLPfZPy0ePQHLj7zttZsmQJP/vVo2zT/QwMuMK9oqqSE+fMYuFRk5FI1r63gW//6AeUlRbxodPP4dyzPsyz99zOwMAA4NC8fReOMFj73kpwJLPmzKaosJBAqAiRl4ZdHR0Ul5XyhSs/w/6BLsrrKmje+S77o4NccP45PPqce9KZNyLMBq2EJcuXc9GHFrNq5Xu8ubWZkxdnSfXHSCaHmDapilVr+xHCRnMUSqt9xNcL/KqDpmmEgiFisSRen3ucdfKqoXffXkG2JwPeXhLxGDs3bqMqUoGekzhIakZNJJvNomkagUAAVVVJRvuYNXksnc2bOerksw/u3Af7BykbCXogxLbVa7jw7BPZtf49+jo78XosBtMqMlTPQ3c8xKypY1n+1iqqqstoqC7lp9+/BUfx8olLz6awop4H7nscgGh0AFVViA70cuX1v+LN5Uvp6OqgsXYEiUScUDhIIh53vXlwUzN39KURmo9pE6diZdJs3rMer7DIZlwBO66hmsJIGYFwiNryq1m/aimvPvkS3Z1DtO1vpbwiX83Mp+OksygBH5pj07avBTuXxvAHePCJZdQ01pCMu7z06sVsWt2Gz7uZXTs2MqICji7NUjahl47dxZQWufl3Hvily9NjF34YEPh8ATxejdLKCgqKili5ciWTJ41lWVs7o5p3EbZtykq8vNHezikjSnh4RysjZ8zkzbU7uPgz53PnsrX0tuyhtz+G31+Eotn4FQ3hBBiKZahrGMvMyZLBrj564ymuuuJiuqNZisJ+9rUZrN+ym4aSIOu3dVNWUUGZkGzdsfsPZM6V13yNB3/1KMcvWgC5LEuXvOzOD7B7dTOONFAnldG8upnJkxvYvWEj73ZsYvr8E7BMA8VxVTAB3Q2wTGdy6LqH11aux7E0qioLGZA6g1FXznixqS4JI2Qd0USUtJmm2FuMmkpSXFGJZVtMG+9GRceG4hQWhvivj36EB+67j4yVQg96OeeME2jZsZv2wZV8EP5lhLuRc3XqPq8H2xLE43G27d5FW0cbPd09B3eFByIcpZSI/h1ke99lzfs7qawM8vbOJ1hw9k04eQFrigCvrXgDLWehZKNUhQsxCmpo6U6i6Dq65goEj1CJOh6UyhEk9R6MgIeKYCn96Si+gB/h2Hh9XjRFcYtclJbS39+FY0uWL3+TbM46OKYDRsW3VryIr9TPk2ueR2/rZcezUSaeOpadjz1LtFCh0yN58V6NVx9dgSMLeefllzlmwUJadrVx2ofO40c//RWDva0gfm91NeMDGDmTwmKdyopCLrr6JX635CHmHHcc23ftQg2U49g2g1GDy+58mEhRhMxAlM72VrqTQ4xubMBMD5CxwBtwDcQdHR288HqMN994jdrqKqZOnUx38x6Wv72KhpEjKS10PUYGe/YiVMGbr71CdXUZxYWFIBx+8+SvcBzJt2+8Pu99ArFYmguPOYmQv5SgalFbFmaHlWDH7ihLnnmNq7/3ceB5bvvdTiLVccrCQUaNG8ue7dtRSqdSPK6Rh594mtlzZjDv2IW8vXqDm/bVkWTSaVJmjsyAgaqq+Hw+FEU/mO9/w/oN7vemjVRU19C5axvnn3823T2deLwad999N4VBHzccfy7egB9FESgOaLrO1HknMX76AnRfAKkYrHze9RPIJaP0dHUiMt34QsW8v/V9vF4v8+bNoLm1mbYdXfh1jTPPPI14LMElHzuHd5e+yxuWQTKRJhVLUz96DF2Daa74wie59c5bGegfRFEUgsEgmq7x9Euvc99tt7J262bWb99JNpcDoeAgcSQ4SLzhAFouya+ffZrtu3vw+FJ0d/cyFHffHcOyqAzpjBkZpnbyAhY/dzeNpxzDBF8RI8sbaGyoZfWvf4mRSWEroGZSDGRTFDQW8cwTO7jw06dxztk6iil56oe/BkBLhfnsJR/j7nuX0DDKz+e/cCZ6wKS4qBTb0hjsdwOjvvjZqwG4+Ue3EU2lyRkm+/bt5qSTTiIQDFIcKWIoHmWwyM8Lg51c7Y+QTpgMTaog0dxFg2IRXbqauY5F2w/vA6Bp/Gg8O7ayZuM2guEaVNUhFA7h8fvZv2s/I6qmEIxIZh49md+88BoFhcVUVZQiVIeykIaqeRhRXsK2/W2UFOcN7gp4pOtscOUnLyMn4IqrvkJJWQ0rXnsZS4Cu6gSKJB++5AJe2rIG3ymj2JPZwtd+/AJzz1pIX28fAwMpwgVuLiXDcN2Je/v6SBkG8Z5u+jI6+7r6mDGjhPKwG+0rcDjm6Mk8+tQbZGwoKh/BQHKIgOZDODmGonFG17jjrCwNs3bNVr70318mFAozd97xfOITF7N19Ttsau3FEYkPlKn/MsL9xIVuCkvbtDAMCyEcvAEvSr7Qgq65q6NjOShCxZEOiZ6NeESGqupKEul+xtQ3Yls2BxRrg307KAgLUjlQIzEcn0JRUKOrcxcF3gp6elzBGaktJFDlJ02KKaMDZLMOyZhDQYEfadnoHg0pHKZOasAf8FFXX82pp15Nb08bY8bM4N7770fXNbxeH1LaxONJbvvIhQxkolQWV6EIN0eMtBU8Xo2sYWPaFo6UbNyTIL1/LX5SeCNedsc1pFPEUXNPoGXjC5iHnCOvu/hLSMUmlYoRT3Xy0vIzmDzuKDat2kw2l6S/J86MuYs4d+R4pJMl1d3O1u1b6OvvIWXbVBWV4SgRqkdOwLIV2L4Bw7aJJdNYXg+Jjh7WbN/NvU++QCLZy1GTpzJ3putCW11dgWXZ3PPz27EsC1VVUTXFFbBeH5lM5uDCdtsdN7Dq7V+zY0+GTc3ddCQcrIRDYWGI5vYoV1zxMwDu++X1vLNrH68/sZQf3HIrQ2kPl54xj/EnncnUU84ma9mkE1Fs1T1uO6pCOFLC6DrY29pKLJ5ACgXHMbDsvE9Pfuc+sn4kg4ODbNu6lcGefuKxNH6/H5CceOJCTCSOZYGw8Wo6jmEQ7+3BEykl2duOnYwzPk97aEQJvb37kEYEXzxzsMCyoqgolo9cOk3cyKF6FbfWqWmw6LRjsW24997nKAwV0Nrej+pReOct1xPEtNwNQSaVQgC1oxrwFZeSzZk0lEfYvr8b07TIZJJksyZ6xqZjPyyaVUqwaAQnTS5neXsn045uIms43P7DpWzdvZ/Wtija2wmKPWkSaRtycRwPJALFFOWzXEYTQ4SCIeKpJJUFRfiLQmi+YnQVckNRFM0hUlYJtOKUmkw4o5DO6/fx8QsuRVSmQI9AxiAnTcIF7uLfus8tAv3JSz9CJBLhlVeX8kRXO9u2bWfunKN4f80qZs9sIBEI0zRjIg8mopS0d3LWvFNZveoZEnHBk36TIkslnnYFVzLaT3lVJQsCPra37md0Yx2Txk8gkxwgHkuSTedo2d9B/1CK5m3N3HvHj3nu6acoDAVImh5OP6GMOx6JUt3QQGzQXYRUKXBUB13X2LDqHRRbsm78eNbv3I7uSDxCoAV0Jnjq6ezopc5XQrRjCMv2cuyHPsKGLavwZgShhEKs102T0B137Q2GlNhpyejxYzB3dzOmdiLBUBiPz59/gxWKgipCmvT39fPVKy6mtqqUj3/xW9Q21tC6YwtK/h0qLalFspW6ugaEouI4kttuuwNfMIzfF2bMmImsY+v/KFP/ZYR7QaFrdY9FowQDOiUlJYBDLuf68+7e/bdHSm7b3cK4keVEfBphrxddH0KzLEaVhYj2DzJhrPubqmpTWOnBSWeRjoLmkdiahaYroEM6ncK2bRbMm4aCxZhR1TSNKqBp1ExWrd3O9d/4LBdddAFvrXiN9vZBXnphOTlHUBYuQ1O9eHV/PnmYgtB0HJFGGgbpbIadm7Yxd8YEqkZP5L5HX+ZTF11IXXWAq6+7GyOfIeYAvvXIPVimybbXX6AzleWY448DvZhdOzby6I9v5bNf/QYjGwS/+OFDPHXZ55gyYRyr1q8mPRSjvnoK8axJUIYZHMhQXjcVAI9QsE2DLBIvOqZlYsocQgRYt2UnKzf/zw/Qn8PG1a+QSKjMnzMSRSi8v24/hpliRGUJhpI9uFA/9+xqyipUPnbhqQylDe689xk6o1HU5BD1Y2cjVI2O1lV/02+H/a5hPjhyDPV1Nk3jJpKID+SjeL2EC4pRVZ3ul+8hk07h9+n4fSEUBFnLxrFsFAU8uoZtuIv/4ECC4tJy/H4/JSUlBINBFNXEyBkEAn6mTJmIIyVGVpKzBLalYOY8+AKSq77+ce685X6+fulXCPh9ZLLuIuTYNpqmIZBomgfbsjnr3PNYuWIpfbYb8WlaNh868VNYho3mUbHmDtDT1822/T0sWd7CTdd9EymykLO5/YdL3ULYVhodmz0DWXyVM7BzOTQ1QFKEWbrGjeINBL1EE/0UhgtJ2Q6p3AAZJ8OPH1yCZbjVinym614pUyrFI0rJ2QaDbUNsWJrk6JOKcdDxo6Lq7mKqHZLcLpFIsPDY+cyfNxfF4+GJZ56kbmQTg2kLfUQFoUovYcvCP2UGy5t7EGfOx0jnOB0br6IgNIXtv36NbNYm5NfRUTlqykx2bW+m3dOC4vEQKSjn3Q2bOPWEk/hd814CIR/f+uFNlIZ9VGij6UoO8cvfZrHMLLl4Gj3v3B4J+xldU4O3IMyoiZOob6ijp62Tr375S8Q+82lSyRjLl73F1Mp6Vqx+l5H1I5lQVINQFUaMHE/QFDjZJHo4hJkyeOfZd5GO+44mUzn6WzuYOK0Re2cPE8aNpjeZJi3zcTBCQZGS0089lpaubo5uGkkmnWZa02Te2biGZDZNf944/o/AcIHsYQxjGMP498W/fIHsJLDzcA/iMKAU6D/cg/g/xn8izfCfSfcwzf981P+lG/8qwn3nX1p9jmQIIdb+p9H9n0gz/GfSPUzz4cUHO0sOYxjDGMYw/u0wLNyHMYxhDOMIxL+KcP/F4R7AYcJ/It3/iTTDfybdwzQfRvxLeMsMYxjDGMYw/rH4V9m5D2MYwxjGMP6BOOzCXQhxqhBipxBid77Y9hEBIUStEGK5EGK7EGKrEOKL+fZiIcTrQojm/HdRvl0IIe7Mz8MmIcSMw0vB3w8hhCqEWC+EeDF/PVIIsTpP8xNCCE++3Zu/3p2/33A4x/2/Qb5e8NNCiB15ns890nkthPhy/tneIoR4XAjhOxJ5LYS4XwjRK4TYckjb38xbIcQl+f7NQohL/tnjPqzCXbjlW+4CTgMmABcJISYczjH9A2EBV0kpxwNzgP/O03YN8IaUcgzwRv4a3DkYk/9cDvxpTb9/H3wROLQ6wg+B2/I0R4FP5ds/BUSllKOB2/L9/l1xB7BEStkETMWl/4jltRBiBHAlMCtfflMFPsKRyesHgVP/qO1v4q0Qohi3FsbRwGzghgMLwj8NB5JdHY4PMBd49ZDra4FrD+eY/om0/hY4CTdYqyrfVoXr4w9wD3DRIf0P9vt3+uCWVnwDOAF4ETfJXj+g/THPgVeBufm/tXw/cbhp+DtoLgD2/vHYj2Re4xa+bwOK87x7ETjlSOU10ABs+Xt5C1wE3HNI+x/0+2d8Drda5sADcgDt+bYjCvkj6HRgNVAh86UH89/l+W5HylzcDlyNW44SoAQYklJa+etD6TpIc/5+LN//3w2NQB/wQF4dda8QIsgRzGspZQfw/3ArsXXh8m4dRz6vD+Bv5e3/Oc8Pt3D/c5Whjyj3HSFECHgG+JKUMv4/df0zbf9WcyGEWAz0SinXHdr8Z7rKv+LevxM0YAZwt5RyOpDi98f0P4d/e7rzKoUPASOBaiCIq5L4YxxpvP4g/CU6/8/pP9zCvR2oPeS6Bug8TGP5h0MIoeMK9kellM/mm3uEEFX5+1XAgcKOR8JcHAOcJYRoBX6Nq5q5HYgIIQ6kujiUroM05+8XAoP/lwP+B6EdaJdSrs5fP40r7I9kXp8I7JVS9km35NazwDyOfF4fwN/K2/9znh9u4f4eMCZvYffgGmSeP8xj+odAuEm/7wO2Syl/fMit54EDlvJLcHXxB9ovzlvb5wCxA8e+fxdIKa+VUtZIKRtweblMSvlRYDlwXr7bH9N8YC7Oy/f/t9vNSSm7gTYhxLh80yJgG0cwr3HVMXOEEIH8s36A5iOa14fgb+Xtq8DJQoii/Knn5HzbPw//AoaK04FdwB7gm4d7PP9AuubjHrs2ARvyn9Nx9YxvAM357+J8f4HrObQH2IzrhXDY6fhf0H888GL+70ZgDbAbeArw5tt9+evd+fuNh3vc/wt6pwFr8/z+DVB0pPMauBHYAWwBHgG8RyKvgcdx7Qom7g78U38Pb4FP5unfDXzinz3u4QjVYQxjGMM4AnG41TLDGMYwhjGMfwKGhfswhjGMYRyBGBbuwxjGMIZxBGJYuA9jGMMYxhGIYeE+jGEMYxhHIIaF+zCGMYxhHIEYFu7DGMYwhnEEYli4D2MYwxjGEYj/D6yqS33GgGZPAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "transform_base = [transforms.ToTensor()]\n",
    "\n",
    "transform_train = transforms.Compose([\n",
    "    transforms.RandomHorizontalFlip(),\n",
    "    transforms.RandomCrop(32, padding=4, padding_mode='reflect'),\n",
    "    ] + transform_base)\n",
    "\n",
    "transform_test = transforms.Compose(transform_base)\n",
    "transform_train = transforms.RandomChoice([transform_train, transform_test])\n",
    "\n",
    "#~/data/cifar10\n",
    "CIFAR10_trainset = torchvision.datasets.CIFAR10(root='~/data/cifar10', train=True, download=True, transform=transform_train)\n",
    "CIFAR10_train_loader = torch.utils.data.DataLoader(CIFAR10_trainset, batch_size=BATCH_SIZE_TRAIN_CIFAR10, shuffle=True, num_workers=2)\n",
    "\n",
    "#~/data/cifar10\n",
    "CIFAR10_testset = torchvision.datasets.CIFAR10(root='~/data/cifar10', train=False, download=True, transform=transform_test)\n",
    "CIFAR10_test_loader = torch.utils.data.DataLoader(CIFAR10_testset, batch_size=BATCH_SIZE_TEST_CIFAR10, shuffle=False, num_workers=2)\n",
    "\n",
    "classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')\n",
    "\n",
    "dataiter = iter(CIFAR10_train_loader)\n",
    "images, labels = dataiter.next()\n",
    "nrow = int(BATCH_SIZE_TRAIN_CIFAR10/4)\n",
    "imshow(torchvision.utils.make_grid(images, nrow=nrow))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 131
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 7805,
     "status": "ok",
     "timestamp": 1591126424263,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "GfOmcawIc_Gt",
    "outputId": "6c828686-6113-4732-dcb3-403fe252576c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#load in CIFAR100\n",
    "BATCH_SIZE_TRAIN_CIFAR100 = 128\n",
    "BATCH_SIZE_TEST_CIFAR100 = 128\n",
    "\n",
    "#'~/data/cifar100'\n",
    "CIFAR100_train = torchvision.datasets.CIFAR100(root='~/data/cifar100', train=True,\n",
    "                                       download=True, transform=transform_train)\n",
    "CIFAR100_train_loader = torch.utils.data.DataLoader(CIFAR100_train, batch_size=BATCH_SIZE_TRAIN_CIFAR100,\n",
    "                                         shuffle=False)\n",
    "#'~/data/cifar100'\n",
    "CIFAR100_test = torchvision.datasets.CIFAR100(root='~/data/cifar100', train=False,\n",
    "                                       download=True, transform=transform_test)\n",
    "CIFAR100_test_loader = torch.utils.data.DataLoader(CIFAR100_test, batch_size=BATCH_SIZE_TEST_CIFAR100,\n",
    "                                         shuffle=False)\n",
    "\n",
    "CIFAR100_classes = [\n",
    "    'apple', 'aquarium_fish', 'baby', 'bear', 'beaver', 'bed', 'bee', 'beetle', \n",
    "    'bicycle', 'bottle', 'bowl', 'boy', 'bridge', 'bus', 'butterfly', 'camel', \n",
    "    'can', 'castle', 'caterpillar', 'cattle', 'chair', 'chimpanzee', 'clock', \n",
    "    'cloud', 'cockroach', 'couch', 'crab', 'crocodile', 'cup', 'dinosaur', \n",
    "    'dolphin', 'elephant', 'flatfish', 'forest', 'fox', 'girl', 'hamster', \n",
    "    'house', 'kangaroo', 'keyboard', 'lamp', 'lawn_mower', 'leopard', 'lion',\n",
    "    'lizard', 'lobster', 'man', 'maple_tree', 'motorcycle', 'mountain', 'mouse',\n",
    "    'mushroom', 'oak_tree', 'orange', 'orchid', 'otter', 'palm_tree', 'pear',\n",
    "    'pickup_truck', 'pine_tree', 'plain', 'plate', 'poppy', 'porcupine',\n",
    "    'possum', 'rabbit', 'raccoon', 'ray', 'road', 'rocket', 'rose',\n",
    "    'sea', 'seal', 'shark', 'shrew', 'skunk', 'skyscraper', 'snail', 'snake',\n",
    "    'spider', 'squirrel', 'streetcar', 'sunflower', 'sweet_pepper', 'table',\n",
    "    'tank', 'telephone', 'television', 'tiger', 'tractor', 'train', 'trout',\n",
    "    'tulip', 'turtle', 'wardrobe', 'whale', 'willow_tree', 'wolf', 'woman',\n",
    "    'worm'\n",
    "]\n",
    "\n",
    "dataiter = iter(CIFAR100_train_loader)\n",
    "images, labels = dataiter.next()\n",
    "nrow = int(BATCH_SIZE_TRAIN_CIFAR100/4)\n",
    "imshow(torchvision.utils.make_grid(images, nrow=nrow))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 131
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 11670,
     "status": "ok",
     "timestamp": 1591126428355,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "xDMTdXMNc_G8",
    "outputId": "b03296a5-c407-4fd3-a19c-950d48816da4"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# load SVHN\n",
    "BATCH_SIZE_TRAIN_SVHN = 128\n",
    "BATCH_SIZE_TEST_SVHN = 128\n",
    "\n",
    "#'~/data/SVHN'\n",
    "train_data_SVHN = torchvision.datasets.SVHN('~/data/SVHN', split='train',\n",
    "                             download=False, transform=transform_train)\n",
    "\n",
    "#'~/data/SVHN'\n",
    "test_data_SVHN = torchvision.datasets.SVHN('~/data/SVHN', split='test',\n",
    "                             download=False, transform=transform_test)\n",
    "\n",
    "SVHN_train_loader = torch.utils.data.DataLoader(test_data_SVHN, batch_size=BATCH_SIZE_TRAIN_SVHN)\n",
    "SVHN_test_loader = torch.utils.data.DataLoader(test_data_SVHN, batch_size=BATCH_SIZE_TEST_SVHN)\n",
    "\n",
    "dataiter = iter(SVHN_train_loader)\n",
    "images, labels = dataiter.next()\n",
    "nrow = int(BATCH_SIZE_TRAIN_SVHN/4)\n",
    "imshow(torchvision.utils.make_grid(images, nrow=nrow))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ySv8B-GHc_HE"
   },
   "source": [
    "# Train CIFAR100 on ResNet18 (or load weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "sjkkKSjFc_HG"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torch.nn.functional as F\n",
    "import torch.backends.cudnn as cudnn\n",
    "\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "qnu4LyH3c_HL"
   },
   "outputs": [],
   "source": [
    "class BasicBlock(nn.Module):\n",
    "    expansion = 1\n",
    "\n",
    "    def __init__(self, in_planes, planes, stride=1):\n",
    "        super(BasicBlock, self).__init__()\n",
    "        self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False)\n",
    "        self.bn1 = nn.BatchNorm2d(planes)\n",
    "        self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False)\n",
    "        self.bn2 = nn.BatchNorm2d(planes)\n",
    "\n",
    "        self.shortcut = nn.Sequential()\n",
    "        if stride != 1 or in_planes != self.expansion*planes:\n",
    "            self.shortcut = nn.Sequential(\n",
    "                nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False),\n",
    "                nn.BatchNorm2d(self.expansion*planes)\n",
    "            )\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = F.relu(self.bn1(self.conv1(x)))\n",
    "        out = self.bn2(self.conv2(out))\n",
    "        out += self.shortcut(x)\n",
    "        out = F.relu(out)\n",
    "        return out\n",
    "\n",
    "\n",
    "class ResNet(nn.Module):\n",
    "    def __init__(self, block, num_blocks, num_classes=10, num_of_channels=3):\n",
    "        super(ResNet, self).__init__()\n",
    "        self.in_planes = 64\n",
    "\n",
    "        self.conv1 = nn.Conv2d(num_of_channels, 64, kernel_size=3, stride=1, padding=1, bias=False)\n",
    "        self.bn1 = nn.BatchNorm2d(64)\n",
    "        self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1)\n",
    "        self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2)\n",
    "        self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2)\n",
    "        self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2)\n",
    "        self.linear = nn.Linear(512*block.expansion, num_classes)\n",
    "\n",
    "    def _make_layer(self, block, planes, num_blocks, stride):\n",
    "        strides = [stride] + [1]*(num_blocks-1)\n",
    "        layers = []\n",
    "        for stride in strides:\n",
    "            layers.append(block(self.in_planes, planes, stride))\n",
    "            self.in_planes = planes * block.expansion\n",
    "        return nn.Sequential(*layers)\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = self.features(x)\n",
    "        out = self.linear(out)\n",
    "        return out\n",
    "\n",
    "    def features(self, x):\n",
    "        out = F.relu(self.bn1(self.conv1(x)))\n",
    "        out = self.layer1(out)\n",
    "        out = self.layer2(out)\n",
    "        out = self.layer3(out)\n",
    "        out = self.layer4(out)\n",
    "        out = F.avg_pool2d(out, 4)\n",
    "        out = out.view(out.size(0), -1)\n",
    "        return out\n",
    "\n",
    "\n",
    "def ResNet18(num_of_channels=3, num_classes=10):\n",
    "    if num_classes <= 2:\n",
    "        num_classes = 1\n",
    "\n",
    "    return ResNet(BasicBlock, [2,2,2,2],\n",
    "                  num_of_channels=num_of_channels,\n",
    "                  num_classes=num_classes)\n",
    "\n",
    "def ResNet18(num_classes=10):\n",
    "    return ResNet(BasicBlock, [2,2,2,2], num_classes=num_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "ORChHBtxc_Hp"
   },
   "outputs": [],
   "source": [
    "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "cuda_status = torch.cuda.is_available()\n",
    "CIFAR100_model = ResNet18(num_classes=100).to(device)\n",
    "best_acc = 0  # best test accuracy\n",
    "start_epoch = 0  # start from epoch 0 or last checkpoint epoch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "V2E-2hK3c_H7"
   },
   "outputs": [],
   "source": [
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = optim.SGD(CIFAR100_model.parameters(), lr=0.1, momentum=0.9, weight_decay=5e-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "U2xS8TCEc_IF"
   },
   "outputs": [],
   "source": [
    "# Training\n",
    "def train(net, epoch, optimizer, trainloader, filename):\n",
    "    print('\\nEpoch: %d' % epoch)\n",
    "    net.train()\n",
    "    train_loss = 0\n",
    "    correct = 0\n",
    "    total = 0\n",
    "    for batch_idx, (inputs, targets) in enumerate(trainloader):\n",
    "        inputs, targets = inputs.to(device), targets.to(device)\n",
    "        optimizer.zero_grad()\n",
    "        outputs = net(inputs)\n",
    "        loss = criterion(outputs, targets)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        train_loss += loss.item()\n",
    "        _, predicted = outputs.max(1)\n",
    "        total += targets.size(0)\n",
    "        correct += predicted.eq(targets).sum().item()\n",
    "        \n",
    "    \n",
    "    print(\"train loss: \", train_loss)\n",
    "    print(\"train accuracy: \", correct/total)\n",
    "    print(\"saving model at: {}\".format(filename))\n",
    "    torch.save(net.state_dict(), filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "GvrM1bILc_IO"
   },
   "outputs": [],
   "source": [
    "def test(net, epoch, testloader):\n",
    "    global best_acc\n",
    "    net.eval()\n",
    "    test_loss = 0\n",
    "    correct = 0\n",
    "    total = 0\n",
    "    with torch.no_grad():\n",
    "        for batch_idx, (inputs, targets) in enumerate(testloader):\n",
    "            inputs, targets = inputs.to(device), targets.to(device)\n",
    "            outputs = net(inputs)\n",
    "            loss = criterion(outputs, targets)\n",
    "\n",
    "            test_loss += loss.item()\n",
    "            _, predicted = outputs.max(1)\n",
    "            total += targets.size(0)\n",
    "            correct += predicted.eq(targets).sum().item()\n",
    "            \n",
    "        print(\"test loss: \", test_loss)\n",
    "        print(\"test accuracy: \", correct/total)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "g5_u3JBfc_IU"
   },
   "outputs": [],
   "source": [
    "def train_all():\n",
    "    CIFAR10_path = 'weights/cifar100_resnet18_SGD.pth'\n",
    "    lr = 0.1\n",
    "    epoch = 0\n",
    "    for e in [100, 50, 50]:\n",
    "        print(\"current learning rate: \", lr)\n",
    "        for _ in range(e):\n",
    "            optimizer = optim.SGD(CIFAR100_model.parameters(), lr=lr, momentum=0.9, weight_decay=5e-4)\n",
    "            train(CIFAR100_model, epoch, optimizer, CIFAR100_train_loader, CIFAR100_path)\n",
    "            test(CIFAR100_model, epoch, CIFAR100_test_loader)\n",
    "            epoch += 1\n",
    "        lr /= 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "TBhBW8yFc_Ib"
   },
   "outputs": [],
   "source": [
    "#train_all()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 16209,
     "status": "ok",
     "timestamp": 1591126435383,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "Ygkql29Oc_Ih",
    "outputId": "8c6899a7-2ea9-4fd6-81a5-5bc61586e642"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading model from: pretrained_weights/CIFAR100_resnet18_pretrained.pt\n",
      "test loss:  71.76386892795563\n",
      "test accuracy:  0.7675\n"
     ]
    }
   ],
   "source": [
    "##### if you already have a trained model ##############\n",
    "CIFAR100_PATH = 'pretrained_weights/CIFAR100_resnet18_pretrained.pt'\n",
    "CIFAR100_model = ResNet18(num_classes=100).to(device)\n",
    "print(\"loading model from: {}\".format(CIFAR100_PATH))\n",
    "CIFAR100_model.load_state_dict(torch.load(CIFAR100_PATH))#, map_location=torch.device('cpu')))\n",
    "#test the model\n",
    "test(CIFAR100_model, 0, CIFAR100_test_loader)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "YasrUI_6c_Ir"
   },
   "source": [
    "# prepare Gaussians (Diag and KFAC)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1594576,
     "status": "ok",
     "timestamp": 1588365325547,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "eVVdabzMc_JG",
    "outputId": "a8f94687-50e3-47db-dda9-63a39f472805"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n: 512 inputs to linear layer with m: 100 classes\n",
      "Batch: 0/391\n",
      "Batch: 1/391\n",
      "Batch: 2/391\n",
      "Batch: 3/391\n",
      "Batch: 4/391\n",
      "Batch: 5/391\n",
      "Batch: 6/391\n",
      "Batch: 7/391\n",
      "Batch: 8/391\n",
      "Batch: 9/391\n",
      "Batch: 10/391\n",
      "Batch: 11/391\n",
      "Batch: 12/391\n",
      "Batch: 13/391\n",
      "Batch: 14/391\n",
      "Batch: 15/391\n",
      "Batch: 16/391\n",
      "Batch: 17/391\n",
      "Batch: 18/391\n",
      "Batch: 19/391\n",
      "Batch: 20/391\n",
      "Batch: 21/391\n",
      "Batch: 22/391\n",
      "Batch: 23/391\n",
      "Batch: 24/391\n",
      "Batch: 25/391\n",
      "Batch: 26/391\n",
      "Batch: 27/391\n",
      "Batch: 28/391\n",
      "Batch: 29/391\n",
      "Batch: 30/391\n",
      "Batch: 31/391\n",
      "Batch: 32/391\n",
      "Batch: 33/391\n",
      "Batch: 34/391\n",
      "Batch: 35/391\n",
      "Batch: 36/391\n",
      "Batch: 37/391\n",
      "Batch: 38/391\n",
      "Batch: 39/391\n",
      "Batch: 40/391\n",
      "Batch: 41/391\n",
      "Batch: 42/391\n",
      "Batch: 43/391\n",
      "Batch: 44/391\n",
      "Batch: 45/391\n",
      "Batch: 46/391\n",
      "Batch: 47/391\n",
      "Batch: 48/391\n",
      "Batch: 49/391\n",
      "Batch: 50/391\n",
      "Batch: 51/391\n",
      "Batch: 52/391\n",
      "Batch: 53/391\n",
      "Batch: 54/391\n",
      "Batch: 55/391\n",
      "Batch: 56/391\n",
      "Batch: 57/391\n",
      "Batch: 58/391\n",
      "Batch: 59/391\n",
      "Batch: 60/391\n",
      "Batch: 61/391\n",
      "Batch: 62/391\n",
      "Batch: 63/391\n",
      "Batch: 64/391\n",
      "Batch: 65/391\n",
      "Batch: 66/391\n",
      "Batch: 67/391\n",
      "Batch: 68/391\n",
      "Batch: 69/391\n",
      "Batch: 70/391\n",
      "Batch: 71/391\n",
      "Batch: 72/391\n",
      "Batch: 73/391\n",
      "Batch: 74/391\n",
      "Batch: 75/391\n",
      "Batch: 76/391\n",
      "Batch: 77/391\n",
      "Batch: 78/391\n",
      "Batch: 79/391\n",
      "Batch: 80/391\n",
      "Batch: 81/391\n",
      "Batch: 82/391\n",
      "Batch: 83/391\n",
      "Batch: 84/391\n",
      "Batch: 85/391\n",
      "Batch: 86/391\n",
      "Batch: 87/391\n",
      "Batch: 88/391\n",
      "Batch: 89/391\n",
      "Batch: 90/391\n",
      "Batch: 91/391\n",
      "Batch: 92/391\n",
      "Batch: 93/391\n",
      "Batch: 94/391\n",
      "Batch: 95/391\n",
      "Batch: 96/391\n",
      "Batch: 97/391\n",
      "Batch: 98/391\n",
      "Batch: 99/391\n",
      "Batch: 100/391\n",
      "Batch: 101/391\n",
      "Batch: 102/391\n",
      "Batch: 103/391\n",
      "Batch: 104/391\n",
      "Batch: 105/391\n",
      "Batch: 106/391\n",
      "Batch: 107/391\n",
      "Batch: 108/391\n",
      "Batch: 109/391\n",
      "Batch: 110/391\n",
      "Batch: 111/391\n",
      "Batch: 112/391\n",
      "Batch: 113/391\n",
      "Batch: 114/391\n",
      "Batch: 115/391\n",
      "Batch: 116/391\n",
      "Batch: 117/391\n",
      "Batch: 118/391\n",
      "Batch: 119/391\n",
      "Batch: 120/391\n",
      "Batch: 121/391\n",
      "Batch: 122/391\n",
      "Batch: 123/391\n",
      "Batch: 124/391\n",
      "Batch: 125/391\n",
      "Batch: 126/391\n",
      "Batch: 127/391\n",
      "Batch: 128/391\n",
      "Batch: 129/391\n",
      "Batch: 130/391\n",
      "Batch: 131/391\n",
      "Batch: 132/391\n",
      "Batch: 133/391\n",
      "Batch: 134/391\n",
      "Batch: 135/391\n",
      "Batch: 136/391\n",
      "Batch: 137/391\n",
      "Batch: 138/391\n",
      "Batch: 139/391\n",
      "Batch: 140/391\n",
      "Batch: 141/391\n",
      "Batch: 142/391\n",
      "Batch: 143/391\n",
      "Batch: 144/391\n",
      "Batch: 145/391\n",
      "Batch: 146/391\n",
      "Batch: 147/391\n",
      "Batch: 148/391\n",
      "Batch: 149/391\n",
      "Batch: 150/391\n",
      "Batch: 151/391\n",
      "Batch: 152/391\n",
      "Batch: 153/391\n",
      "Batch: 154/391\n",
      "Batch: 155/391\n",
      "Batch: 156/391\n",
      "Batch: 157/391\n",
      "Batch: 158/391\n",
      "Batch: 159/391\n",
      "Batch: 160/391\n",
      "Batch: 161/391\n",
      "Batch: 162/391\n",
      "Batch: 163/391\n",
      "Batch: 164/391\n",
      "Batch: 165/391\n",
      "Batch: 166/391\n",
      "Batch: 167/391\n",
      "Batch: 168/391\n",
      "Batch: 169/391\n",
      "Batch: 170/391\n",
      "Batch: 171/391\n",
      "Batch: 172/391\n",
      "Batch: 173/391\n",
      "Batch: 174/391\n",
      "Batch: 175/391\n",
      "Batch: 176/391\n",
      "Batch: 177/391\n",
      "Batch: 178/391\n",
      "Batch: 179/391\n",
      "Batch: 180/391\n",
      "Batch: 181/391\n",
      "Batch: 182/391\n",
      "Batch: 183/391\n",
      "Batch: 184/391\n",
      "Batch: 185/391\n",
      "Batch: 186/391\n",
      "Batch: 187/391\n",
      "Batch: 188/391\n",
      "Batch: 189/391\n",
      "Batch: 190/391\n",
      "Batch: 191/391\n",
      "Batch: 192/391\n",
      "Batch: 193/391\n",
      "Batch: 194/391\n",
      "Batch: 195/391\n",
      "Batch: 196/391\n",
      "Batch: 197/391\n",
      "Batch: 198/391\n",
      "Batch: 199/391\n",
      "Batch: 200/391\n",
      "Batch: 201/391\n",
      "Batch: 202/391\n",
      "Batch: 203/391\n",
      "Batch: 204/391\n",
      "Batch: 205/391\n",
      "Batch: 206/391\n",
      "Batch: 207/391\n",
      "Batch: 208/391\n",
      "Batch: 209/391\n",
      "Batch: 210/391\n",
      "Batch: 211/391\n",
      "Batch: 212/391\n",
      "Batch: 213/391\n",
      "Batch: 214/391\n",
      "Batch: 215/391\n",
      "Batch: 216/391\n",
      "Batch: 217/391\n",
      "Batch: 218/391\n",
      "Batch: 219/391\n",
      "Batch: 220/391\n",
      "Batch: 221/391\n",
      "Batch: 222/391\n",
      "Batch: 223/391\n",
      "Batch: 224/391\n",
      "Batch: 225/391\n",
      "Batch: 226/391\n",
      "Batch: 227/391\n",
      "Batch: 228/391\n",
      "Batch: 229/391\n",
      "Batch: 230/391\n",
      "Batch: 231/391\n",
      "Batch: 232/391\n",
      "Batch: 233/391\n",
      "Batch: 234/391\n",
      "Batch: 235/391\n",
      "Batch: 236/391\n",
      "Batch: 237/391\n",
      "Batch: 238/391\n",
      "Batch: 239/391\n",
      "Batch: 240/391\n",
      "Batch: 241/391\n",
      "Batch: 242/391\n",
      "Batch: 243/391\n",
      "Batch: 244/391\n",
      "Batch: 245/391\n",
      "Batch: 246/391\n",
      "Batch: 247/391\n",
      "Batch: 248/391\n",
      "Batch: 249/391\n",
      "Batch: 250/391\n",
      "Batch: 251/391\n",
      "Batch: 252/391\n",
      "Batch: 253/391\n",
      "Batch: 254/391\n",
      "Batch: 255/391\n",
      "Batch: 256/391\n",
      "Batch: 257/391\n",
      "Batch: 258/391\n",
      "Batch: 259/391\n",
      "Batch: 260/391\n",
      "Batch: 261/391\n",
      "Batch: 262/391\n",
      "Batch: 263/391\n",
      "Batch: 264/391\n",
      "Batch: 265/391\n",
      "Batch: 266/391\n",
      "Batch: 267/391\n",
      "Batch: 268/391\n",
      "Batch: 269/391\n",
      "Batch: 270/391\n",
      "Batch: 271/391\n",
      "Batch: 272/391\n",
      "Batch: 273/391\n",
      "Batch: 274/391\n",
      "Batch: 275/391\n",
      "Batch: 276/391\n",
      "Batch: 277/391\n",
      "Batch: 278/391\n",
      "Batch: 279/391\n",
      "Batch: 280/391\n",
      "Batch: 281/391\n",
      "Batch: 282/391\n",
      "Batch: 283/391\n",
      "Batch: 284/391\n",
      "Batch: 285/391\n",
      "Batch: 286/391\n",
      "Batch: 287/391\n",
      "Batch: 288/391\n",
      "Batch: 289/391\n",
      "Batch: 290/391\n",
      "Batch: 291/391\n",
      "Batch: 292/391\n",
      "Batch: 293/391\n",
      "Batch: 294/391\n",
      "Batch: 295/391\n",
      "Batch: 296/391\n",
      "Batch: 297/391\n",
      "Batch: 298/391\n",
      "Batch: 299/391\n",
      "Batch: 300/391\n",
      "Batch: 301/391\n",
      "Batch: 302/391\n",
      "Batch: 303/391\n",
      "Batch: 304/391\n",
      "Batch: 305/391\n",
      "Batch: 306/391\n",
      "Batch: 307/391\n",
      "Batch: 308/391\n",
      "Batch: 309/391\n",
      "Batch: 310/391\n",
      "Batch: 311/391\n",
      "Batch: 312/391\n",
      "Batch: 313/391\n",
      "Batch: 314/391\n",
      "Batch: 315/391\n",
      "Batch: 316/391\n",
      "Batch: 317/391\n",
      "Batch: 318/391\n",
      "Batch: 319/391\n",
      "Batch: 320/391\n",
      "Batch: 321/391\n",
      "Batch: 322/391\n",
      "Batch: 323/391\n",
      "Batch: 324/391\n",
      "Batch: 325/391\n",
      "Batch: 326/391\n",
      "Batch: 327/391\n",
      "Batch: 328/391\n",
      "Batch: 329/391\n",
      "Batch: 330/391\n",
      "Batch: 331/391\n",
      "Batch: 332/391\n",
      "Batch: 333/391\n",
      "Batch: 334/391\n",
      "Batch: 335/391\n",
      "Batch: 336/391\n",
      "Batch: 337/391\n",
      "Batch: 338/391\n",
      "Batch: 339/391\n",
      "Batch: 340/391\n",
      "Batch: 341/391\n",
      "Batch: 342/391\n",
      "Batch: 343/391\n",
      "Batch: 344/391\n",
      "Batch: 345/391\n",
      "Batch: 346/391\n",
      "Batch: 347/391\n",
      "Batch: 348/391\n",
      "Batch: 349/391\n",
      "Batch: 350/391\n",
      "Batch: 351/391\n",
      "Batch: 352/391\n",
      "Batch: 353/391\n",
      "Batch: 354/391\n",
      "Batch: 355/391\n",
      "Batch: 356/391\n",
      "Batch: 357/391\n",
      "Batch: 358/391\n",
      "Batch: 359/391\n",
      "Batch: 360/391\n",
      "Batch: 361/391\n",
      "Batch: 362/391\n",
      "Batch: 363/391\n",
      "Batch: 364/391\n",
      "Batch: 365/391\n",
      "Batch: 366/391\n",
      "Batch: 367/391\n",
      "Batch: 368/391\n",
      "Batch: 369/391\n",
      "Batch: 370/391\n",
      "Batch: 371/391\n",
      "Batch: 372/391\n",
      "Batch: 373/391\n",
      "Batch: 374/391\n",
      "Batch: 375/391\n",
      "Batch: 376/391\n",
      "Batch: 377/391\n",
      "Batch: 378/391\n",
      "Batch: 379/391\n",
      "Batch: 380/391\n",
      "Batch: 381/391\n",
      "Batch: 382/391\n",
      "Batch: 383/391\n",
      "Batch: 384/391\n",
      "Batch: 385/391\n",
      "Batch: 386/391\n",
      "Batch: 387/391\n",
      "Batch: 388/391\n",
      "Batch: 389/391\n",
      "Batch: 390/391\n",
      "391\n",
      "M_W_post size:  torch.Size([512, 100])\n",
      "M_b_post size:  torch.Size([100])\n",
      "C_W_post size:  torch.Size([100, 512])\n",
      "C_b_post size:  torch.Size([100])\n"
     ]
    }
   ],
   "source": [
    "M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D = Diag_second_order(model=CIFAR100_model,\n",
    "                                                               train_loader=CIFAR100_train_loader,\n",
    "                                                               var0 = 1e-2, #1e-2\n",
    "                                                               device=device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 64083,
     "status": "ok",
     "timestamp": 1591126488225,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "G9pcQTaNc_JP",
    "outputId": "725ddda1-776e-4585-e722-be3cdcea41e6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Batch: 0/391\n",
      "Batch: 1/391\n",
      "Batch: 2/391\n",
      "Batch: 3/391\n",
      "Batch: 4/391\n",
      "Batch: 5/391\n",
      "Batch: 6/391\n",
      "Batch: 7/391\n",
      "Batch: 8/391\n",
      "Batch: 9/391\n",
      "Batch: 10/391\n",
      "Batch: 11/391\n",
      "Batch: 12/391\n",
      "Batch: 13/391\n",
      "Batch: 14/391\n",
      "Batch: 15/391\n",
      "Batch: 16/391\n",
      "Batch: 17/391\n",
      "Batch: 18/391\n",
      "Batch: 19/391\n",
      "Batch: 20/391\n",
      "Batch: 21/391\n",
      "Batch: 22/391\n",
      "Batch: 23/391\n",
      "Batch: 24/391\n",
      "Batch: 25/391\n",
      "Batch: 26/391\n",
      "Batch: 27/391\n",
      "Batch: 28/391\n",
      "Batch: 29/391\n",
      "Batch: 30/391\n",
      "Batch: 31/391\n",
      "Batch: 32/391\n",
      "Batch: 33/391\n",
      "Batch: 34/391\n",
      "Batch: 35/391\n",
      "Batch: 36/391\n",
      "Batch: 37/391\n",
      "Batch: 38/391\n",
      "Batch: 39/391\n",
      "Batch: 40/391\n",
      "Batch: 41/391\n",
      "Batch: 42/391\n",
      "Batch: 43/391\n",
      "Batch: 44/391\n",
      "Batch: 45/391\n",
      "Batch: 46/391\n",
      "Batch: 47/391\n",
      "Batch: 48/391\n",
      "Batch: 49/391\n",
      "Batch: 50/391\n",
      "Batch: 51/391\n",
      "Batch: 52/391\n",
      "Batch: 53/391\n",
      "Batch: 54/391\n",
      "Batch: 55/391\n",
      "Batch: 56/391\n",
      "Batch: 57/391\n",
      "Batch: 58/391\n",
      "Batch: 59/391\n",
      "Batch: 60/391\n",
      "Batch: 61/391\n",
      "Batch: 62/391\n",
      "Batch: 63/391\n",
      "Batch: 64/391\n",
      "Batch: 65/391\n",
      "Batch: 66/391\n",
      "Batch: 67/391\n",
      "Batch: 68/391\n",
      "Batch: 69/391\n",
      "Batch: 70/391\n",
      "Batch: 71/391\n",
      "Batch: 72/391\n",
      "Batch: 73/391\n",
      "Batch: 74/391\n",
      "Batch: 75/391\n",
      "Batch: 76/391\n",
      "Batch: 77/391\n",
      "Batch: 78/391\n",
      "Batch: 79/391\n",
      "Batch: 80/391\n",
      "Batch: 81/391\n",
      "Batch: 82/391\n",
      "Batch: 83/391\n",
      "Batch: 84/391\n",
      "Batch: 85/391\n",
      "Batch: 86/391\n",
      "Batch: 87/391\n",
      "Batch: 88/391\n",
      "Batch: 89/391\n",
      "Batch: 90/391\n",
      "Batch: 91/391\n",
      "Batch: 92/391\n",
      "Batch: 93/391\n",
      "Batch: 94/391\n",
      "Batch: 95/391\n",
      "Batch: 96/391\n",
      "Batch: 97/391\n",
      "Batch: 98/391\n",
      "Batch: 99/391\n",
      "Batch: 100/391\n",
      "Batch: 101/391\n",
      "Batch: 102/391\n",
      "Batch: 103/391\n",
      "Batch: 104/391\n",
      "Batch: 105/391\n",
      "Batch: 106/391\n",
      "Batch: 107/391\n",
      "Batch: 108/391\n",
      "Batch: 109/391\n",
      "Batch: 110/391\n",
      "Batch: 111/391\n",
      "Batch: 112/391\n",
      "Batch: 113/391\n",
      "Batch: 114/391\n",
      "Batch: 115/391\n",
      "Batch: 116/391\n",
      "Batch: 117/391\n",
      "Batch: 118/391\n",
      "Batch: 119/391\n",
      "Batch: 120/391\n",
      "Batch: 121/391\n",
      "Batch: 122/391\n",
      "Batch: 123/391\n",
      "Batch: 124/391\n",
      "Batch: 125/391\n",
      "Batch: 126/391\n",
      "Batch: 127/391\n",
      "Batch: 128/391\n",
      "Batch: 129/391\n",
      "Batch: 130/391\n",
      "Batch: 131/391\n",
      "Batch: 132/391\n",
      "Batch: 133/391\n",
      "Batch: 134/391\n",
      "Batch: 135/391\n",
      "Batch: 136/391\n",
      "Batch: 137/391\n",
      "Batch: 138/391\n",
      "Batch: 139/391\n",
      "Batch: 140/391\n",
      "Batch: 141/391\n",
      "Batch: 142/391\n",
      "Batch: 143/391\n",
      "Batch: 144/391\n",
      "Batch: 145/391\n",
      "Batch: 146/391\n",
      "Batch: 147/391\n",
      "Batch: 148/391\n",
      "Batch: 149/391\n",
      "Batch: 150/391\n",
      "Batch: 151/391\n",
      "Batch: 152/391\n",
      "Batch: 153/391\n",
      "Batch: 154/391\n",
      "Batch: 155/391\n",
      "Batch: 156/391\n",
      "Batch: 157/391\n",
      "Batch: 158/391\n",
      "Batch: 159/391\n",
      "Batch: 160/391\n",
      "Batch: 161/391\n",
      "Batch: 162/391\n",
      "Batch: 163/391\n",
      "Batch: 164/391\n",
      "Batch: 165/391\n",
      "Batch: 166/391\n",
      "Batch: 167/391\n",
      "Batch: 168/391\n",
      "Batch: 169/391\n",
      "Batch: 170/391\n",
      "Batch: 171/391\n",
      "Batch: 172/391\n",
      "Batch: 173/391\n",
      "Batch: 174/391\n",
      "Batch: 175/391\n",
      "Batch: 176/391\n",
      "Batch: 177/391\n",
      "Batch: 178/391\n",
      "Batch: 179/391\n",
      "Batch: 180/391\n",
      "Batch: 181/391\n",
      "Batch: 182/391\n",
      "Batch: 183/391\n",
      "Batch: 184/391\n",
      "Batch: 185/391\n",
      "Batch: 186/391\n",
      "Batch: 187/391\n",
      "Batch: 188/391\n",
      "Batch: 189/391\n",
      "Batch: 190/391\n",
      "Batch: 191/391\n",
      "Batch: 192/391\n",
      "Batch: 193/391\n",
      "Batch: 194/391\n",
      "Batch: 195/391\n",
      "Batch: 196/391\n",
      "Batch: 197/391\n",
      "Batch: 198/391\n",
      "Batch: 199/391\n",
      "Batch: 200/391\n",
      "Batch: 201/391\n",
      "Batch: 202/391\n",
      "Batch: 203/391\n",
      "Batch: 204/391\n",
      "Batch: 205/391\n",
      "Batch: 206/391\n",
      "Batch: 207/391\n",
      "Batch: 208/391\n",
      "Batch: 209/391\n",
      "Batch: 210/391\n",
      "Batch: 211/391\n",
      "Batch: 212/391\n",
      "Batch: 213/391\n",
      "Batch: 214/391\n",
      "Batch: 215/391\n",
      "Batch: 216/391\n",
      "Batch: 217/391\n",
      "Batch: 218/391\n",
      "Batch: 219/391\n",
      "Batch: 220/391\n",
      "Batch: 221/391\n",
      "Batch: 222/391\n",
      "Batch: 223/391\n",
      "Batch: 224/391\n",
      "Batch: 225/391\n",
      "Batch: 226/391\n",
      "Batch: 227/391\n",
      "Batch: 228/391\n",
      "Batch: 229/391\n",
      "Batch: 230/391\n",
      "Batch: 231/391\n",
      "Batch: 232/391\n",
      "Batch: 233/391\n",
      "Batch: 234/391\n",
      "Batch: 235/391\n",
      "Batch: 236/391\n",
      "Batch: 237/391\n",
      "Batch: 238/391\n",
      "Batch: 239/391\n",
      "Batch: 240/391\n",
      "Batch: 241/391\n",
      "Batch: 242/391\n",
      "Batch: 243/391\n",
      "Batch: 244/391\n",
      "Batch: 245/391\n",
      "Batch: 246/391\n",
      "Batch: 247/391\n",
      "Batch: 248/391\n",
      "Batch: 249/391\n",
      "Batch: 250/391\n",
      "Batch: 251/391\n",
      "Batch: 252/391\n",
      "Batch: 253/391\n",
      "Batch: 254/391\n",
      "Batch: 255/391\n",
      "Batch: 256/391\n",
      "Batch: 257/391\n",
      "Batch: 258/391\n",
      "Batch: 259/391\n",
      "Batch: 260/391\n",
      "Batch: 261/391\n",
      "Batch: 262/391\n",
      "Batch: 263/391\n",
      "Batch: 264/391\n",
      "Batch: 265/391\n",
      "Batch: 266/391\n",
      "Batch: 267/391\n",
      "Batch: 268/391\n",
      "Batch: 269/391\n",
      "Batch: 270/391\n",
      "Batch: 271/391\n",
      "Batch: 272/391\n",
      "Batch: 273/391\n",
      "Batch: 274/391\n",
      "Batch: 275/391\n",
      "Batch: 276/391\n",
      "Batch: 277/391\n",
      "Batch: 278/391\n",
      "Batch: 279/391\n",
      "Batch: 280/391\n",
      "Batch: 281/391\n",
      "Batch: 282/391\n",
      "Batch: 283/391\n",
      "Batch: 284/391\n",
      "Batch: 285/391\n",
      "Batch: 286/391\n",
      "Batch: 287/391\n",
      "Batch: 288/391\n",
      "Batch: 289/391\n",
      "Batch: 290/391\n",
      "Batch: 291/391\n",
      "Batch: 292/391\n",
      "Batch: 293/391\n",
      "Batch: 294/391\n",
      "Batch: 295/391\n",
      "Batch: 296/391\n",
      "Batch: 297/391\n",
      "Batch: 298/391\n",
      "Batch: 299/391\n",
      "Batch: 300/391\n",
      "Batch: 301/391\n",
      "Batch: 302/391\n",
      "Batch: 303/391\n",
      "Batch: 304/391\n",
      "Batch: 305/391\n",
      "Batch: 306/391\n",
      "Batch: 307/391\n",
      "Batch: 308/391\n",
      "Batch: 309/391\n",
      "Batch: 310/391\n",
      "Batch: 311/391\n",
      "Batch: 312/391\n",
      "Batch: 313/391\n",
      "Batch: 314/391\n",
      "Batch: 315/391\n",
      "Batch: 316/391\n",
      "Batch: 317/391\n",
      "Batch: 318/391\n",
      "Batch: 319/391\n",
      "Batch: 320/391\n",
      "Batch: 321/391\n",
      "Batch: 322/391\n",
      "Batch: 323/391\n",
      "Batch: 324/391\n",
      "Batch: 325/391\n",
      "Batch: 326/391\n",
      "Batch: 327/391\n",
      "Batch: 328/391\n",
      "Batch: 329/391\n",
      "Batch: 330/391\n",
      "Batch: 331/391\n",
      "Batch: 332/391\n",
      "Batch: 333/391\n",
      "Batch: 334/391\n",
      "Batch: 335/391\n",
      "Batch: 336/391\n",
      "Batch: 337/391\n",
      "Batch: 338/391\n",
      "Batch: 339/391\n",
      "Batch: 340/391\n",
      "Batch: 341/391\n",
      "Batch: 342/391\n",
      "Batch: 343/391\n",
      "Batch: 344/391\n",
      "Batch: 345/391\n",
      "Batch: 346/391\n",
      "Batch: 347/391\n",
      "Batch: 348/391\n",
      "Batch: 349/391\n",
      "Batch: 350/391\n",
      "Batch: 351/391\n",
      "Batch: 352/391\n",
      "Batch: 353/391\n",
      "Batch: 354/391\n",
      "Batch: 355/391\n",
      "Batch: 356/391\n",
      "Batch: 357/391\n",
      "Batch: 358/391\n",
      "Batch: 359/391\n",
      "Batch: 360/391\n",
      "Batch: 361/391\n",
      "Batch: 362/391\n",
      "Batch: 363/391\n",
      "Batch: 364/391\n",
      "Batch: 365/391\n",
      "Batch: 366/391\n",
      "Batch: 367/391\n",
      "Batch: 368/391\n",
      "Batch: 369/391\n",
      "Batch: 370/391\n",
      "Batch: 371/391\n",
      "Batch: 372/391\n",
      "Batch: 373/391\n",
      "Batch: 374/391\n",
      "Batch: 375/391\n",
      "Batch: 376/391\n",
      "Batch: 377/391\n",
      "Batch: 378/391\n",
      "Batch: 379/391\n",
      "Batch: 380/391\n",
      "Batch: 381/391\n",
      "Batch: 382/391\n",
      "Batch: 383/391\n",
      "Batch: 384/391\n",
      "Batch: 385/391\n",
      "Batch: 386/391\n",
      "Batch: 387/391\n",
      "Batch: 388/391\n",
      "Batch: 389/391\n",
      "Batch: 390/391\n",
      "M_W_post size:  torch.Size([512, 100])\n",
      "M_b_post size:  torch.Size([100])\n",
      "U_post size:  torch.Size([100, 100])\n",
      "V_post size:  torch.Size([512, 512])\n",
      "B_post size:  torch.Size([100, 100])\n"
     ]
    }
   ],
   "source": [
    "M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K = KFLP_second_order(model=CIFAR100_model,\n",
    "                                                               train_loader=CIFAR100_train_loader,                                                            \n",
    "                                                               var0 = 1e-1, #1e-1\n",
    "                                                               device=device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "eJsYd6Aec_Ke"
   },
   "outputs": [],
   "source": [
    "targets_CIFAR100 = CIFAR100_test.targets\n",
    "targets_CIFAR10 = CIFAR10_testset.targets\n",
    "targets_SVHN = []\n",
    "for x,y in SVHN_test_loader:\n",
    "    targets_SVHN.append(y)\n",
    "targets_SVHN = torch.cat(targets_SVHN).numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "g5Fv1e1GC_Ug"
   },
   "outputs": [],
   "source": [
    "num_samples = 1000"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "BdICbIMYc_LJ"
   },
   "source": [
    "# MAP estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "EQfaElEvc_LK"
   },
   "outputs": [],
   "source": [
    "CIFAR100_test_in_MAP = predict_MAP(CIFAR100_model, CIFAR100_test_loader, cuda=cuda_status).cpu().numpy()\n",
    "CIFAR100_test_out_CIFAR10_MAP = predict_MAP(CIFAR100_model, CIFAR10_test_loader, cuda=cuda_status).cpu().numpy()\n",
    "CIFAR100_test_out_SVHN_MAP = predict_MAP(CIFAR100_model, SVHN_test_loader, cuda=cuda_status).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "uPMpD2cac_LP"
   },
   "outputs": [],
   "source": [
    "acc_in_MAP, prob_correct_in_MAP, ent_in_MAP, MMC_in_MAP = get_in_dist_values(CIFAR100_test_in_MAP, targets_CIFAR100)\n",
    "acc_out_CIFAR10_MAP, prob_correct_out_CIFAR10_MAP, ent_out_CIFAR10, MMC_out_CIFAR10_MAP, auroc_out_CIFAR10_MAP = get_out_dist_values(CIFAR100_test_in_MAP, CIFAR100_test_out_CIFAR10_MAP, targets_CIFAR10)\n",
    "acc_out_SVHN_MAP, prob_correct_out_SVHN_MAP, ent_out_SVHN, MMC_out_SVHN_MAP, auroc_out_SVHN_MAP = get_out_dist_values(CIFAR100_test_in_MAP, CIFAR100_test_out_SVHN_MAP, targets_SVHN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1646546,
     "status": "ok",
     "timestamp": 1588365377588,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "26fknEjRc_LS",
    "outputId": "f49ce97f-9ca6-4113-e081-a64ca23acb2c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, MAP, CIFAR100] Accuracy: 0.767; average entropy: 0.777;     MMC: 0.812; Prob @ correct: 0.010\n",
      "[Out-CIFAR10, MAP, CIFAR100] Accuracy: 0.005; Average entropy: 1.953;    MMC: 0.533; AUROC: 0.786; Prob @ correct: 0.010\n",
      "[Out-SVHN, MAP, CIFAR100] Accuracy: 0.003; Average entropy: 2.006;    MMC: 0.535; AUROC: 0.788; Prob @ correct: 0.010\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_MAP, prob_correct_in_MAP, ent_in_MAP, MMC_in_MAP, 'CIFAR100', 'MAP')\n",
    "print_out_dist_values(acc_out_CIFAR10_MAP, prob_correct_out_CIFAR10_MAP, ent_out_CIFAR10, MMC_out_CIFAR10_MAP, auroc_out_CIFAR10_MAP, 'CIFAR100', 'CIFAR10', 'MAP')\n",
    "print_out_dist_values(acc_out_SVHN_MAP, prob_correct_out_SVHN_MAP, ent_out_SVHN, MMC_out_SVHN_MAP, auroc_out_SVHN_MAP, 'CIFAR100', 'SVHN', 'MAP')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 127
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1646534,
     "status": "ok",
     "timestamp": 1588365377590,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "RHgarR_Dc_LY",
    "outputId": "36b7933d-42ec-4bd7-8526-d75844fbfbf7"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.767 with std 0.000\n",
      "MMC in: 0.812 with std 0.000\n",
      "MMC out CIFAR10: 0.533 with std 0.000\n",
      "MMC out SVHN: 0.535 with std 0.000\n",
      "AUROC out CIFAR10: 0.786 with std 0.000\n",
      "AUROC out SVHN: 0.788 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#MAP estimate\n",
    "#seeds are 123,124,125,126,127\n",
    "acc_in = [0.767, 0.767, 0.767, 0.767, 0.767]\n",
    "mmc_in = [0.812, 0.812, 0.812, 0.812, 0.812]\n",
    "mmc_out_CIFAR10 = [0.533, 0.533, 0.533, 0.533, 0.533]\n",
    "mmc_out_SVHN = [0.535, 0.535, 0.535, 0.535, 0.535]\n",
    "\n",
    "auroc_out_CIFAR10 = [0.786, 0.786, 0.786, 0.786, 0.786]\n",
    "auroc_out_SVHN = [0.788, 0.788, 0.788, 0.788, 0.788]\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "print(\"MMC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_SVHN), np.std(mmc_out_SVHN)))\n",
    "\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))\n",
    "print(\"AUROC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_SVHN), np.std(auroc_out_SVHN)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "UqikIW_Cc_Lb"
   },
   "source": [
    "# Diagonal estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1670180,
     "status": "ok",
     "timestamp": 1588365401253,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "e38KQHHAc_Lc",
    "outputId": "093a45c4-92e3-43d9-fc87-f99647cfda72"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for sampling with 1000 samples: 9.863711833953857\n",
      "time used for sampling with 1000 samples: 9.850099086761475\n",
      "time used for sampling with 1000 samples: 26.078864336013794\n"
     ]
    }
   ],
   "source": [
    "CIFAR100_test_in_D = predict_diagonal_sampling(CIFAR100_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_CIFAR10_D = predict_diagonal_sampling(CIFAR100_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_SVHN_D = predict_diagonal_sampling(CIFAR100_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "yotu_TyJc_Li"
   },
   "outputs": [],
   "source": [
    "acc_in_D, prob_correct_in_D, ent_in_D, MMC_in_D = get_in_dist_values(CIFAR100_test_in_D, targets_CIFAR100)\n",
    "acc_out_CIFAR10_D, prob_correct_out_CIFAR10_D, ent_out_CIFAR10_D, MMC_out_CIFAR10_D, auroc_out_CIFAR10_D = get_out_dist_values(CIFAR100_test_in_D, CIFAR100_test_out_CIFAR10_D, targets_CIFAR10)\n",
    "acc_out_SVHN_D, prob_correct_out_SVHN_D, ent_out_SVHN_D, MMC_out_SVHN_D, auroc_out_SVHN_D = get_out_dist_values(CIFAR100_test_in_D, CIFAR100_test_out_SVHN_D, targets_SVHN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1670162,
     "status": "ok",
     "timestamp": 1588365401260,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "0E8xqHRbc_Ln",
    "outputId": "ee2c09e1-b9fd-4edf-c5b6-edc977b9ad2f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, Diag, CIFAR100] Accuracy: 0.768; average entropy: 0.939;     MMC: 0.775; Prob @ correct: 0.010\n",
      "[Out-CIFAR10, Diag, CIFAR100] Accuracy: 0.005; Average entropy: 1.953;    MMC: 0.483; AUROC: 0.788; Prob @ correct: 0.010\n",
      "[Out-SVHN, Diag, CIFAR100] Accuracy: 0.003; Average entropy: 2.252;    MMC: 0.479; AUROC: 0.793; Prob @ correct: 0.010\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_D, prob_correct_in_D, ent_in_D, MMC_in_D, 'CIFAR100', 'Diag')\n",
    "print_out_dist_values(acc_out_CIFAR10_D, prob_correct_out_CIFAR10_D, ent_out_CIFAR10, MMC_out_CIFAR10_D, auroc_out_CIFAR10_D, 'CIFAR100', 'CIFAR10', 'Diag')\n",
    "print_out_dist_values(acc_out_SVHN_D, prob_correct_out_SVHN_D, ent_out_SVHN_D, MMC_out_SVHN_D, auroc_out_SVHN_D, 'CIFAR100','SVHN', 'Diag')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 182
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1670134,
     "status": "ok",
     "timestamp": 1588365401264,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "lXVODmzEc_Lt",
    "outputId": "43f254b1-1c68-48d0-a519-77706f2631de"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sampling Bridge time in: 6.757 with std 0.090\n",
      "Sampling Bridge time out CIFAR10: 6.711 with std 0.044\n",
      "Sampling Bridge time out SVHN: 17.317 with std 0.257\n",
      "accuracy: 154.014 with std 306.493\n",
      "MMC in: 0.762 with std 0.000\n",
      "MMC out CIFAR10: 0.467 with std 0.000\n",
      "MMC out SVHN: 0.461 with std 0.000\n",
      "AUROC out CIFAR10: 0.788 with std 0.000\n",
      "AUROC out SVHN: 0.795 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Diag Sampling with 1000 samples as shown in the main paper\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [6.87181282043457, 6.618573188781738, 6.837454795837402, 6.737536668777466, 6.721747636795044]\n",
    "time_lpb_out_CIFAR10 = [6.728863477706909, 6.764957666397095, 6.709510803222656, 6.721902370452881, 6.6313300132751465]\n",
    "time_lpb_out_SVHN = [17.104454040527344, 17.28581976890564, 17.78620171546936, 17.065251350402832, 17.34569239616394\n",
    "\n",
    "]\n",
    "\n",
    "acc_in = [0.768, 0.767, 0.767, 0.768, 767]\n",
    "mmc_in = [0.762, 0.762, 0.762, 0.762, 0.762]\n",
    "mmc_out_CIFAR10 = [0.467, 0.467, 0.467, 0.467, 0.467]\n",
    "mmc_out_SVHN = [0.461, 0.461, 0.461, 0.461, 0.461]\n",
    "\n",
    "auroc_out_CIFAR10 = [0.788, 0.788, 0.788, 0.788, 0.788]\n",
    "auroc_out_SVHN = [0.795, 0.795, 0.795, 0.795, 0.795]\n",
    "\n",
    "print(\"Sampling Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Sampling Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "print(\"Sampling Bridge time out SVHN: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_SVHN), np.std(time_lpb_out_SVHN)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "print(\"MMC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_SVHN), np.std(mmc_out_SVHN)))\n",
    "\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))\n",
    "print(\"AUROC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_SVHN), np.std(auroc_out_SVHN)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ZZj9IvJOc_MX"
   },
   "source": [
    "# KFAC estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1692834,
     "status": "ok",
     "timestamp": 1588365423980,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "Xe76pG0wc_Ma",
    "outputId": "057c0ff8-ba2e-4fb7-bc39-3d22e8f01883"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for sampling with 1000 samples: 10.388545274734497\n",
      "time used for sampling with 1000 samples: 9.628454685211182\n",
      "time used for sampling with 1000 samples: 25.055577039718628\n"
     ]
    }
   ],
   "source": [
    "CIFAR100_test_in_K = predict_KFAC_sampling(CIFAR100_model, CIFAR100_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_CIFAR10_K = predict_KFAC_sampling(CIFAR100_model, CIFAR10_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_SVHN_K = predict_KFAC_sampling(CIFAR100_model, SVHN_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "8ARClhE8c_Mg"
   },
   "outputs": [],
   "source": [
    "acc_in_K, prob_correct_in_K, ent_in_K, MMC_in_K = get_in_dist_values(CIFAR100_test_in_K, targets_CIFAR100)\n",
    "acc_out_CIFAR10_K, prob_correct_out_CIFAR10_K, ent_out_CIFAR10_K, MMC_out_CIFAR10_K, auroc_out_CIFAR10_K = get_out_dist_values(CIFAR100_test_in_K, CIFAR100_test_out_CIFAR10_K, targets_CIFAR10)\n",
    "acc_out_SVHN_K, prob_correct_out_SVHN_K, ent_out_SVHN_K, MMC_out_SVHN_K, auroc_out_SVHN_K = get_out_dist_values(CIFAR100_test_in_K, CIFAR100_test_out_SVHN_K, targets_SVHN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1692815,
     "status": "ok",
     "timestamp": 1588365423984,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "ewwgsSe9c_Ml",
    "outputId": "1e0ef109-4128-41b8-c7d5-85c873044b5c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, KFAC, CIFAR100] Accuracy: 0.768; average entropy: 1.029;     MMC: 0.756; Prob @ correct: 0.010\n",
      "[Out-CIFAR10, KFAC, CIFAR100] Accuracy: 0.005; Average entropy: 1.953;    MMC: 0.463; AUROC: 0.788; Prob @ correct: 0.010\n",
      "[Out-SVHN, KFAC, CIFAR100] Accuracy: 0.003; Average entropy: 2.377;    MMC: 0.453; AUROC: 0.798; Prob @ correct: 0.010\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_K, prob_correct_in_K, ent_in_K, MMC_in_K, 'CIFAR100', 'KFAC')\n",
    "print_out_dist_values(acc_out_CIFAR10_K, prob_correct_out_CIFAR10_K, ent_out_CIFAR10, MMC_out_CIFAR10_K, auroc_out_CIFAR10_K, 'CIFAR100', 'CIFAR10', 'KFAC')\n",
    "print_out_dist_values(acc_out_SVHN_K, prob_correct_out_SVHN_K, ent_out_SVHN_K, MMC_out_SVHN_K, auroc_out_SVHN_K, 'CIFAR100', 'SVHN', 'KFAC')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Laplace Bridge time in: 6.726 with std 0.007\n",
      "Laplace Bridge time out CIFAR100: 6.699 with std 0.038\n",
      "Laplace Bridge time out notmnist: 17.254 with std 0.033\n",
      "accuracy: 0.768 with std 0.000\n",
      "MMC in: 0.757 with std 0.000\n",
      "MMC out CIFAR100: 0.463 with std 0.000\n",
      "MMC out SVHN: 0.453 with std 0.000\n",
      "AUROC out CIFAR100: 0.788 with std 0.000\n",
      "AUROC out SVHN: 0.798 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#KFAC approximation of the Hessian with 1000 samples as shown in the main paper \n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [6.727457761764526, 6.733807325363159, 6.716255187988281]\n",
    "time_lpb_out_CIFAR10 = [6.65116024017334, 6.743668794631958, 6.703462362289429]\n",
    "time_lpb_out_SVHN = [17.301148891448975, 17.235487699508667, 17.225988626480103]\n",
    "\n",
    "\n",
    "acc_in = [0.768, 0.767, 0.767, 0.768, 0.768]\n",
    "mmc_in = [0.757, 0.756, 0.757, 0.757, 0.756]\n",
    "mmc_out_CIFAR10 = [0.463, 0.463, 0.463, 0.463, 0.463]\n",
    "mmc_out_SVHN = [0.453, 0.453, 0.453, 0.453, 0.453]\n",
    "\n",
    "auroc_out_CIFAR10 = [0.788, 0.788, 0.788, 0.788, 0.788]\n",
    "auroc_out_SVHN = [0.798, 0.798, 0.798, 0.798, 0.798]\n",
    "\n",
    "\n",
    "print(\"Laplace Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Laplace Bridge time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "print(\"Laplace Bridge time out notmnist: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_SVHN), np.std(time_lpb_out_SVHN)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "print(\"MMC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_SVHN), np.std(mmc_out_SVHN)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))\n",
    "print(\"AUROC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_SVHN), np.std(auroc_out_SVHN)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "wl2O4llSc_M1"
   },
   "source": [
    "# Laplace Bridge estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1707101,
     "status": "ok",
     "timestamp": 1588365438317,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "wdwRD0V8c_M2",
    "outputId": "38f5e96a-40e4-4441-9514-713ef781fad4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total time used for forward pass: 1.19123\n",
      "total time used for Laplace Bridge: 0.02023\n",
      "total time used for forward pass: 1.28768\n",
      "total time used for Laplace Bridge: 0.02152\n",
      "total time used for forward pass: 3.75781\n",
      "total time used for Laplace Bridge: 0.06010\n"
     ]
    }
   ],
   "source": [
    "CIFAR100_test_in_LB = predict_LB(CIFAR100_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, verbose=False, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_CIFAR10_LB = predict_LB(CIFAR100_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_SVHN_LB = predict_LB(CIFAR100_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "08wlLgMec_M9"
   },
   "outputs": [],
   "source": [
    "#normalize to get the MAP estimate (which is the mode) of the Dirichlet\n",
    "CIFAR100_test_in_LBn = CIFAR100_test_in_LB/CIFAR100_test_in_LB.sum(1).reshape(-1,1)\n",
    "CIFAR100_test_out_CIFAR10_LBn = CIFAR100_test_out_CIFAR10_LB/CIFAR100_test_out_CIFAR10_LB.sum(1).reshape(-1,1)\n",
    "CIFAR100_test_out_SVHN_LBn = CIFAR100_test_out_SVHN_LB/CIFAR100_test_out_SVHN_LB.sum(1).reshape(-1,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "5BVHBhW5c_ND"
   },
   "outputs": [],
   "source": [
    "acc_in_LB, prob_correct_in_LB, ent_in_LB, MMC_in_LB = get_in_dist_values(CIFAR100_test_in_LBn, targets_CIFAR100)\n",
    "acc_out_CIFAR10_LB, prob_correct_out_CIFAR10_LB, ent_out_CIFAR10_LB, MMC_out_CIFAR10_LB, auroc_out_CIFAR10_LB = get_out_dist_values(CIFAR100_test_in_LBn, CIFAR100_test_out_CIFAR10_LBn, targets_CIFAR10)\n",
    "acc_out_SVHN_LB, prob_correct_out_SVHN_LB, ent_out_SVHN_LB, MMC_out_SVHN_LB, auroc_out_SVHN_LB = get_out_dist_values(CIFAR100_test_in_LBn, CIFAR100_test_out_SVHN_LBn, targets_SVHN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1707074,
     "status": "ok",
     "timestamp": 1588365438321,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "NJx4wLw-c_NI",
    "outputId": "5e5d0939-e27b-402e-dfcc-c6e2376642ef"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, Laplace Bridge, CIFAR100] Accuracy: 0.767; average entropy: 2.118;     MMC: 0.593; Prob @ correct: 0.010\n",
      "[Out-CIFAR10, Laplace Bridge, CIFAR100] Accuracy: 0.005; Average entropy: 3.890;    MMC: 0.209; AUROC: 0.791; Prob @ correct: 0.010\n",
      "[Out-SVHN, Laplace Bridge, CIFAR100] Accuracy: 0.003; Average entropy: 4.070;    MMC: 0.174; AUROC: 0.814; Prob @ correct: 0.010\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_LB, prob_correct_in_LB, ent_in_LB, MMC_in_LB, 'CIFAR100', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_CIFAR10_LB, prob_correct_out_CIFAR10_LB, ent_out_CIFAR10_LB, MMC_out_CIFAR10_LB, auroc_out_CIFAR10_LB, 'CIFAR100', 'CIFAR10', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_SVHN_LB, prob_correct_out_SVHN_LB, ent_out_SVHN_LB, MMC_out_SVHN_LB, auroc_out_SVHN_LB, 'CIFAR100', 'SVHN', 'Laplace Bridge')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 182
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1707062,
     "status": "ok",
     "timestamp": 1588365438323,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "Pxhs0u1Dc_NP",
    "outputId": "5955ed0f-f7ad-49ee-871b-4a0210b83078"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Laplace Bridge time in: 0.016 with std 0.000\n",
      "Laplace Bridge time out CIFAR10: 0.017 with std 0.000\n",
      "Laplace Bridge time out notmnist: 0.041 with std 0.000\n",
      "accuracy: 0.767 with std 0.000\n",
      "MMC in: 0.590 with std 0.000\n",
      "MMC out CIFAR10: 0.206 with std 0.000\n",
      "MMC out SVHN: 0.170 with std 0.000\n",
      "AUROC out CIFAR10: 0.791 with std 0.000\n",
      "AUROC out SVHN: 0.815 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Laplace Bridge results as shown in the main paper\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [0.01652, 0.01650, 0.01646, 0.01639, 0.01630]\n",
    "time_lpb_out_CIFAR10 = [0.01663, 0.01712, 0.01687, 0.01675, 0.01682]\n",
    "time_lpb_out_SVHN = [0.04058, 0.04103, 0.04148,0.04101, 0.04159]\n",
    "\n",
    "acc_in = [0.767, 0.767, 0.767, 0.767, 0.767]\n",
    "mmc_in = [0.590, 0.590, 0.590, 0.590, 0.590]\n",
    "mmc_out_CIFAR10 = [0.206, 0.206, 0.206, 0.206, 0.206]\n",
    "mmc_out_SVHN = [0.170, 0.170, 0.170, 0.170, 0.170]\n",
    "\n",
    "auroc_out_CIFAR10 = [0.791, 0.791, 0.791, 0.791, 0.791]\n",
    "auroc_out_SVHN = [0.815, 0.815, 0.815, 0.815, 0.815]\n",
    "\n",
    "\n",
    "print(\"Laplace Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Laplace Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "print(\"Laplace Bridge time out notmnist: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_SVHN), np.std(time_lpb_out_SVHN)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "print(\"MMC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_SVHN), np.std(mmc_out_SVHN)))\n",
    "\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))\n",
    "print(\"AUROC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_SVHN), np.std(auroc_out_SVHN)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "V2loB3iWKeF9"
   },
   "source": [
    "# Laplace Bridge KFAC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 77967,
     "status": "ok",
     "timestamp": 1591126505436,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "FYbK6HEaKgZ0",
    "outputId": "5eeeacda-abe3-454a-d6c0-0845561c1a62"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total time used for transform: 0.02325\n",
      "total time used for transform: 0.02342\n",
      "total time used for transform: 0.05430\n"
     ]
    }
   ],
   "source": [
    "CIFAR100_test_in_LB_KFAC = predict_LB_KFAC(CIFAR100_model, CIFAR100_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, cuda=cuda_status, verbose=False, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_CIFAR10_LB_KFAC = predict_LB_KFAC(CIFAR100_model, CIFAR10_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_SVHN_LB_KFAC = predict_LB_KFAC(CIFAR100_model, SVHN_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "PGdGG2_rKgc9"
   },
   "outputs": [],
   "source": [
    "#normalize to get the MAP estimate (which is the mode) of the Dirichlet\n",
    "CIFAR100_test_in_LB_KFACn = CIFAR100_test_in_LB_KFAC/CIFAR100_test_in_LB_KFAC.sum(1).reshape(-1,1)\n",
    "CIFAR100_test_out_CIFAR10_LB_KFACn = CIFAR100_test_out_CIFAR10_LB_KFAC/CIFAR100_test_out_CIFAR10_LB_KFAC.sum(1).reshape(-1,1)\n",
    "CIFAR100_test_out_SVHN_LB_KFACn = CIFAR100_test_out_SVHN_LB_KFAC/CIFAR100_test_out_SVHN_LB_KFAC.sum(1).reshape(-1,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "Z_yaRlA9Kgg7"
   },
   "outputs": [],
   "source": [
    "acc_in_LB_KFAC, prob_correct_in_LB_KFAC, ent_in_LB_KFAC, MMC_in_LB_KFAC = get_in_dist_values(CIFAR100_test_in_LB_KFACn, targets_CIFAR100)\n",
    "acc_out_CIFAR10_LB_KFAC, prob_correct_out_CIFAR10_LB_KFAC, ent_out_CIFAR10_LB_KFAC, MMC_out_CIFAR10_LB_KFAC, auroc_out_CIFAR10_LB_KFAC = get_out_dist_values(CIFAR100_test_in_LB_KFACn, CIFAR100_test_out_CIFAR10_LB_KFACn, targets_CIFAR10)\n",
    "acc_out_SVHN_LB_KFAC, prob_correct_out_SVHN_LB_KFAC, ent_out_SVHN_LB_KFAC, MMC_out_SVHN_LB_KFAC, auroc_out_SVHN_LB_KFAC = get_out_dist_values(CIFAR100_test_in_LB_KFACn, CIFAR100_test_out_SVHN_LB_KFACn, targets_SVHN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 77485,
     "status": "ok",
     "timestamp": 1591126505451,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "log3jZStKglP",
    "outputId": "ee2d2d45-2846-4fbd-e1c6-a95088e40efc"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, Laplace Bridge, CIFAR100] Accuracy: 0.768; average entropy: 2.118;     MMC: 0.593; Prob @ correct: 0.010\n",
      "[Out-Laplace Bridge, KFAC, CIFAR10] Accuracy: 0.005; Average entropy: 3.890;    MMC: 0.209; AUROC: 0.791; Prob @ correct: 0.010\n",
      "[Out-Laplace Bridge, KFAC, SVHN] Accuracy: 0.003; Average entropy: 4.070;    MMC: 0.174; AUROC: 0.814; Prob @ correct: 0.010\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_LB_KFAC, prob_correct_in_LB_KFAC, ent_in_LB_KFAC, MMC_in_LB_KFAC, 'CIFAR100', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_CIFAR10_LB_KFAC, prob_correct_out_CIFAR10_LB_KFAC, ent_out_CIFAR10_LB_KFAC, MMC_out_CIFAR10_LB_KFAC, auroc_out_CIFAR10_LB_KFAC, 'CIFAR10', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_SVHN_LB_KFAC, prob_correct_out_SVHN_LB_KFAC, ent_out_SVHN_LB_KFAC, MMC_out_SVHN_LB_KFAC, auroc_out_SVHN_LB_KFAC, 'SVHN', 'Laplace Bridge')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 182
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 908,
     "status": "ok",
     "timestamp": 1591126656103,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "Xiqccj2kKgqh",
    "outputId": "65c3712c-8f20-4176-f973-710f67de344c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Laplace Bridge time in: 0.019 with std 0.000\n",
      "Laplace Bridge time out CIFAR10: 0.019 with std 0.000\n",
      "Laplace Bridge time out notmnist: 0.049 with std 0.002\n",
      "accuracy: 0.768 with std 0.000\n",
      "MMC in: 0.593 with std 0.000\n",
      "MMC out CIFAR10: 0.209 with std 0.000\n",
      "MMC out SVHN: 0.173 with std 0.000\n",
      "AUROC out CIFAR10: 0.791 with std 0.000\n",
      "AUROC out SVHN: 0.815 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Laplace Bridge KFAC as shown in the main paper\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [0.01839, 0.01852, 0.01869, 0.01926, 0.01861]\n",
    "time_lpb_out_CIFAR10 = [0.01910, 0.01905, 0.01923, 0.01971, 0.01944]\n",
    "time_lpb_out_SVHN = [0.04797, 0.04786, 0.04703, 0.04698, 0.05346]\n",
    "\n",
    "acc_in = [0.768, 0.768, 0.767, 0.768, 0.768]\n",
    "mmc_in = [0.593, 0.593, 0.593, 0.593, 0.593]\n",
    "mmc_out_CIFAR10 = [0.209, 0.209, 0.209, 0.209, 0.209]\n",
    "mmc_out_SVHN = [0.174, 0.174, 0.173, 0.173, 0.173]\n",
    "\n",
    "auroc_out_CIFAR10 = [0.791, 0.791, 0.791, 0.791, 0.791]\n",
    "auroc_out_SVHN = [0.814, 0.814, 0.815, 0.815, 0.815]\n",
    "\n",
    "\n",
    "print(\"Laplace Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Laplace Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "print(\"Laplace Bridge time out notmnist: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_SVHN), np.std(time_lpb_out_SVHN)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "print(\"MMC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_SVHN), np.std(mmc_out_SVHN)))\n",
    "\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))\n",
    "print(\"AUROC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_SVHN), np.std(auroc_out_SVHN)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "wapGV8fJKbpB"
   },
   "source": [
    "# Conditions\n",
    "\n",
    "Test the condition derived in Proposition 1 of the paper and evaluated experimentally in Appendix A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "km2YkVT7c_NU"
   },
   "outputs": [],
   "source": [
    "# check if condition holds\n",
    "\n",
    "def check_condition(alpha_vecs):\n",
    "    #note that this is vectorized\n",
    "    alpha_sum = alpha_vecs.sum(1)\n",
    "    alpha_max = alpha_vecs.max(1)\n",
    "    alpha_sum_minus = alpha_sum - alpha_max\n",
    "    right_side = 0.25 * (np.sqrt(9 * alpha_sum_minus**2 + 10 * alpha_sum_minus + 1) - alpha_sum_minus - 1)\n",
    "    cases = alpha_max > right_side\n",
    "    percentage = np.sum(cases)/len(cases)\n",
    "    return(percentage)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1707042,
     "status": "ok",
     "timestamp": 1588365438326,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "hYEhWziEc_NX",
    "outputId": "d0e56ff4-6d13-46b3-d3d4-e13fe4d475c4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6656\n",
      "0.2176\n",
      "0.17098186846957592\n"
     ]
    }
   ],
   "source": [
    "print(np.sum(check_condition(CIFAR100_test_in_LB)))\n",
    "print(np.sum(check_condition(CIFAR100_test_out_CIFAR10_LB)))\n",
    "print(np.sum(check_condition(CIFAR100_test_out_SVHN_LB)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1707031,
     "status": "ok",
     "timestamp": 1588365438328,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "R4zACU-Nm5qe",
    "outputId": "c6c4f66c-8212-453f-e102-e677a77f2f43"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ratio condition fulfilled CIFAR100 in: 0.662 with std: 0.00012649110640672122\n",
      "ratio condition fulfilled CIFAR10 out: 0.214 with std: 0.00013564659966251497\n",
      "ratio condition fulfilled SVHN out: 0.166 with std: 0.0002330324352812433\n"
     ]
    }
   ],
   "source": [
    "condition_CIFAR100_in = np.array([0.6621, 0.6621, 0.6623, 0.6621, 0.6619])\n",
    "condition_CIFAR10_out = np.array([0.2145, 0.2146, 0.2146, 0.2143, 0.2143])\n",
    "condition_SVHN_out = np.array([0.16606484326982177, 0.1657959434542102, 0.16644898586355256, 0.16621850030731408, 0.1663721573448064])\n",
    "\n",
    "print(\"ratio condition fulfilled CIFAR100 in: {:.03f} with std: {}\".format(np.mean(condition_CIFAR100_in), np.std(condition_CIFAR100_in)))\n",
    "print(\"ratio condition fulfilled CIFAR10 out: {:.03f} with std: {}\".format(np.mean(condition_CIFAR10_out), np.std(condition_CIFAR10_out)))\n",
    "print(\"ratio condition fulfilled SVHN out: {:.03f} with std: {}\".format(np.mean(condition_SVHN_out), np.std(condition_SVHN_out)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "X0mKAz320gBV"
   },
   "source": [
    "# Compare to extended MacKay approach\n",
    "\n",
    "as detailed in Appendix D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for forward pass: 1.317911148071289\n",
      "time used for Extended MacKay Approach: 0.6731894016265869\n",
      "time used for forward pass: 1.2582151889801025\n",
      "time used for Extended MacKay Approach: 0.7211198806762695\n",
      "time used for forward pass: 3.7415876388549805\n",
      "time used for Extended MacKay Approach: 1.3977818489074707\n"
     ]
    }
   ],
   "source": [
    "CIFAR100_test_in_EMK = predict_extended_MacKay(CIFAR100_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_CIFAR10_EMK = predict_extended_MacKay(CIFAR100_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_SVHN_EMK = predict_extended_MacKay(CIFAR100_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "acc_in_EMK, prob_correct_in_EMK, ent_in_EMK, MMC_in_EMK = get_in_dist_values(CIFAR100_test_in_EMK, targets_CIFAR100)\n",
    "acc_out_CIFAR10_EMK, prob_correct_out_CIFAR10_EMK, ent_out_CIFAR10_EMK, MMC_out_CIFAR10_EMK, auroc_out_CIFAR10_EMK = get_out_dist_values(CIFAR100_test_in_EMK, CIFAR100_test_out_CIFAR10_EMK, targets_CIFAR10)\n",
    "acc_out_SVHN_EMK, prob_correct_out_SVHN_EMK, ent_out_SVHN_EMK, MMC_out_SVHN_EMK, auroc_out_SVHN_EMK = get_out_dist_values(CIFAR100_test_in_EMK, CIFAR100_test_out_SVHN_EMK, targets_SVHN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, EMK, CIFAR100] Accuracy: 0.767; average entropy: 1.041;     MMC: 0.766; Prob @ correct: 0.010\n",
      "[Out-CIFAR10, EMK, CIFAR100] Accuracy: 0.005; Average entropy: 2.346;    MMC: 0.464; AUROC: 0.789; Prob @ correct: 0.010\n",
      "[Out-SVHN, EMK, CIFAR100] Accuracy: 0.003; Average entropy: 2.462;    MMC: 0.455; AUROC: 0.798; Prob @ correct: 0.010\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_EMK, prob_correct_in_EMK, ent_in_EMK, MMC_in_EMK, 'CIFAR100', 'EMK')\n",
    "print_out_dist_values(acc_out_CIFAR10_EMK, prob_correct_out_CIFAR10_EMK, ent_out_CIFAR10_EMK, MMC_out_CIFAR10_EMK, auroc_out_CIFAR10_EMK, 'CIFAR100', 'CIFAR10', 'EMK')\n",
    "print_out_dist_values(acc_out_SVHN_EMK, prob_correct_out_SVHN_EMK, ent_out_SVHN_EMK, MMC_out_SVHN_EMK, auroc_out_SVHN_EMK, 'CIFAR100', 'SVHN', 'EMK')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extended MacKay approach time in: 1.139 with std 0.007\n",
      "Extended MacKay approach time out CIFAR10: 1.104 with std 0.030\n",
      "Extended MacKay approach time out notmnist: 2.916 with std 0.024\n",
      "accuracy: 0.767 with std 0.000\n",
      "MMC in: 0.748 with std 0.000\n",
      "MMC out CIFAR10: 0.440 with std 0.000\n",
      "MMC out SVHN: 0.427 with std 0.000\n",
      "AUROC out CIFAR10: 0.790 with std 0.000\n",
      "AUROC out SVHN: 0.802 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Extended MacKay approach as presented in appendix D\n",
    "#seeds are 123,124,125,126,127\n",
    "time_emk_in = [1.1466305255889893, 1.1437389850616455, 1.1364679336547852, 1.1266934871673584, 1.1422181129455566]\n",
    "time_emk_out_CIFAR10 = [1.142693042755127, 1.0986430644989014, 1.1329832077026367, 1.0634422302246094, 1.0832140445709229]\n",
    "time_emk_out_SVHN = [2.93302583694458, 2.9398984909057617, 2.9331722259521484, 2.8816471099853516,2.894725799560547]\n",
    "\n",
    "acc_in = [0.768, 0.767, 0.768, 0.767, 0.767]\n",
    "mmc_in = [0.748, 0.748, 0.748, 0.748, 0.748]\n",
    "mmc_out_CIFAR10 = [0.440, 0.440, 0.440, 0.440, 0.440]\n",
    "mmc_out_SVHN = [0.427, 0.427, 0.427, 0.427, 0.427]\n",
    "\n",
    "auroc_out_CIFAR10 = [0.790, 0.790, 0.790, 0.790, 0.790]\n",
    "auroc_out_SVHN = [0.802, 0.802, 0.802, 0.803, 0.802]\n",
    "\n",
    "\n",
    "print(\"Extended MacKay approach time in: {:.03f} with std {:.03f}\".format(np.mean(time_emk_in), np.std(time_emk_in)))\n",
    "print(\"Extended MacKay approach time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_emk_out_CIFAR10), np.std(time_emk_out_CIFAR10)))\n",
    "print(\"Extended MacKay approach time out notmnist: {:.03f} with std {:.03f}\".format(np.mean(time_emk_out_SVHN), np.std(time_emk_out_SVHN)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "print(\"MMC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_SVHN), np.std(mmc_out_SVHN)))\n",
    "\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))\n",
    "print(\"AUROC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_SVHN), np.std(auroc_out_SVHN)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Compare to Second-order Delta Posterior Predictive\n",
    "\n",
    "as detailed in appendix D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for forward pass: 1.2765812873840332\n",
      "time used for Second order delta posterior predictive: 0.03542351722717285\n",
      "time used for forward pass: 1.2509400844573975\n",
      "time used for Second order delta posterior predictive: 0.03563642501831055\n",
      "time used for forward pass: 3.601020097732544\n",
      "time used for Second order delta posterior predictive: 0.0992584228515625\n"
     ]
    }
   ],
   "source": [
    "CIFAR100_test_in_SODPP = predict_SODPP(CIFAR100_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_CIFAR10_SODPP = predict_SODPP(CIFAR100_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "CIFAR100_test_out_SVHN_SODPP = predict_SODPP(CIFAR100_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "acc_in_SODPP, prob_correct_in_SODPP, ent_in_SODPP, MMC_in_SODPP = get_in_dist_values(CIFAR100_test_in_SODPP, targets_CIFAR100)\n",
    "acc_out_CIFAR10_SODPP, prob_correct_out_CIFAR10_SODPP, ent_out_CIFAR10_SODPP, MMC_out_CIFAR10_SODPP, auroc_out_CIFAR10_SODPP = get_out_dist_values(CIFAR100_test_in_SODPP, CIFAR100_test_out_CIFAR10_SODPP, targets_CIFAR10)\n",
    "acc_out_SVHN_SODPP, prob_correct_out_SVHN_SODPP, ent_out_SVHN_SODPP, MMC_out_SVHN_SODPP, auroc_out_SVHN_SODPP = get_out_dist_values(CIFAR100_test_in_SODPP, CIFAR100_test_out_SVHN_SODPP, targets_SVHN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, SODPP, CIFAR100] Accuracy: 0.767; average entropy: 0.924;     MMC: 0.772; Prob @ correct: 0.010\n",
      "[Out-CIFAR10, SODPP, CIFAR100] Accuracy: 0.005; Average entropy: 2.160;    MMC: 0.476; AUROC: 0.787; Prob @ correct: 0.010\n",
      "[Out-SVHN, SODPP, CIFAR100] Accuracy: 0.003; Average entropy: 2.249;    MMC: 0.473; AUROC: 0.792; Prob @ correct: 0.010\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_SODPP, prob_correct_in_SODPP, ent_in_SODPP, MMC_in_SODPP, 'CIFAR100', 'SODPP')\n",
    "print_out_dist_values(acc_out_CIFAR10_SODPP, prob_correct_out_CIFAR10_SODPP, ent_out_CIFAR10_SODPP, MMC_out_CIFAR10_SODPP, auroc_out_CIFAR10_SODPP, 'CIFAR100', 'CIFAR10', 'SODPP')\n",
    "print_out_dist_values(acc_out_SVHN_SODPP, prob_correct_out_SVHN_SODPP, ent_out_SVHN_SODPP, MMC_out_SVHN_SODPP, auroc_out_SVHN_SODPP, 'CIFAR100', 'SVHN', 'SODPP')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SODPP time in: 0.024 with std 0.000\n",
      "SODPP time out CIFAR10: 0.025 with std 0.000\n",
      "SODPP time out notmnist: 0.062 with std 0.002\n",
      "accuracy: 0.767 with std 0.000\n",
      "MMC in: 0.758 with std 0.000\n",
      "MMC out CIFAR10: 0.455 with std 0.000\n",
      "MMC out SVHN: 0.450 with std 0.000\n",
      "AUROC out CIFAR10: 0.787 with std 0.000\n",
      "AUROC out SVHN: 0.793 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Second-order delta posterior predictive as presented in appendix D\n",
    "#seeds are 123,124,125,126,127\n",
    "time_SODPP_in = [0.023821115493774414, 0.023821115493774414,0.024135589599609375, 0.02387547492980957, 0.023805618286132812]\n",
    "time_SODPP_out_CIFAR10 = [0.024801969528198242, 0.024801969528198242, 0.025069475173950195, 0.024863004684448242, 0.023669719696044922]\n",
    "time_SODPP_out_SVHN = [0.06317257881164551, 0.06317257881164551, 0.06377005577087402, 0.06192207336425781, 0.05953359603881836]\n",
    "\n",
    "acc_in = [0.767, 0.767, 0.767, 0.767, 0.767]\n",
    "mmc_in = [0.758, 0.758, 0.758, 0.758, 0.758]\n",
    "mmc_out_CIFAR10 = [0.455, 0.455, 0.455, 0.455, 0.455]\n",
    "mmc_out_SVHN = [0.450, 0.450, 0.450, 0.450, 0.450]\n",
    "\n",
    "auroc_out_CIFAR10 = [0.787, 0.787, 0.787, 0.787, 0.787]\n",
    "auroc_out_SVHN = [0.793, 0.793, 0.793, 0.793, 0.793]\n",
    "\n",
    "\n",
    "print(\"SODPP time in: {:.03f} with std {:.03f}\".format(np.mean(time_SODPP_in), np.std(time_SODPP_in)))\n",
    "print(\"SODPP time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_SODPP_out_CIFAR10), np.std(time_SODPP_out_CIFAR10)))\n",
    "print(\"SODPP time out notmnist: {:.03f} with std {:.03f}\".format(np.mean(time_SODPP_out_SVHN), np.std(time_SODPP_out_SVHN)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "print(\"MMC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_SVHN), np.std(mmc_out_SVHN)))\n",
    "\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))\n",
    "print(\"AUROC out SVHN: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_SVHN), np.std(auroc_out_SVHN)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "collapsed_sections": [
    "BdICbIMYc_LJ",
    "UqikIW_Cc_Lb",
    "ZZj9IvJOc_MX",
    "wl2O4llSc_M1"
   ],
   "name": "Exp2_LPA_resnet_CIFAR100.ipynb",
   "provenance": [
    {
     "file_id": "1VhkPnCiC-FaV53c7VpDH44oeUMhNIIfy",
     "timestamp": 1587034936292
    }
   ],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
